31#ifndef ETL_GENERIC_POOL_INCLUDED
32#define ETL_GENERIC_POOL_INCLUDED
37#include "static_assert.h"
40#define ETL_POOL_CPP03_CODE 0
54 template <
size_t VTypeSize,
size_t VAlignment,
size_t VSize>
59 static ETL_CONSTANT
size_t SIZE =
VSize;
60 static ETL_CONSTANT
size_t ALIGNMENT =
VAlignment;
61 static ETL_CONSTANT
size_t TYPE_SIZE =
VTypeSize;
81 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
82 return ipool::allocate<U>();
85#if ETL_CPP11_NOT_SUPPORTED || ETL_POOL_CPP03_CODE || ETL_USING_STLPORT
95 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
96 return ipool::create<U>();
104 template <
typename U,
typename T1>
108 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
109 return ipool::create<U>(value1);
117 template <
typename U,
typename T1,
typename T2>
121 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
122 return ipool::create<U>(value1, value2);
130 template <
typename U,
typename T1,
typename T2,
typename T3>
134 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
135 return ipool::create<U>(value1, value2, value3);
143 template <
typename U,
typename T1,
typename T2,
typename T3,
typename T4>
147 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
148 return ipool::create<U>(value1, value2, value3, value4);
154 template <
typename U,
typename...
Args>
158 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
168 template <
typename U>
172 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
184 typename etl::type_with_alignment<VAlignment>::type dummy;
190 static ETL_CONSTANT uint32_t Element_Size =
sizeof(Element);
197 template <
size_t VTypeSize,
size_t VAlignment,
size_t VSize>
198 ETL_CONSTANT
size_t generic_pool<VTypeSize, VAlignment, VSize>::SIZE;
200 template <
size_t VTypeSize,
size_t VAlignment,
size_t VSize>
201 ETL_CONSTANT
size_t generic_pool<VTypeSize, VAlignment, VSize>::ALIGNMENT;
203 template <
size_t VTypeSize,
size_t VAlignment,
size_t VSize>
204 ETL_CONSTANT
size_t generic_pool<VTypeSize, VAlignment, VSize>::TYPE_SIZE;
211 template <
size_t VTypeSize,
size_t VAlignment>
216 union element_internal
220 typename etl::type_with_alignment<VAlignment>::type dummy;
223 static const size_t ELEMENT_INTERNAL_SIZE =
sizeof(element_internal);
226 static ETL_CONSTANT
size_t ALIGNMENT =
VAlignment;
227 static ETL_CONSTANT
size_t TYPE_SIZE =
VTypeSize;
245 template <
typename U>
249 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
250 return ipool::allocate<U>();
253#if ETL_CPP11_NOT_SUPPORTED || ETL_POOL_CPP03_CODE || ETL_USING_STLPORT
259 template <
typename U>
263 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
264 return ipool::create<U>();
272 template <
typename U,
typename T1>
276 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
277 return ipool::create<U>(value1);
285 template <
typename U,
typename T1,
typename T2>
289 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
290 return ipool::create<U>(value1, value2);
298 template <
typename U,
typename T1,
typename T2,
typename T3>
302 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
303 return ipool::create<U>(value1, value2, value3);
311 template <
typename U,
typename T1,
typename T2,
typename T3,
typename T4>
315 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
316 return ipool::create<U>(value1, value2, value3, value4);
322 template <
typename U,
typename...
Args>
326 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
336 template <
typename U>
340 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
351 template <
size_t VTypeSize,
size_t VAlignment>
352 ETL_CONSTANT
size_t generic_pool_ext<VTypeSize, VAlignment>::ALIGNMENT;
354 template <
size_t VTypeSize,
size_t VAlignment>
355 ETL_CONSTANT
size_t generic_pool_ext<VTypeSize, VAlignment>::TYPE_SIZE;
Definition alignment.h:231
size_t size() const
Returns the number of allocated items in the pool.
Definition ipool.h:301
U * create(const T1 &value1)
Definition generic_pool.h:105
U * create(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition generic_pool.h:144
U * create(const T1 &value1)
Definition generic_pool.h:273
U * create(const T1 &value1, const T2 &value2, const T3 &value3)
Definition generic_pool.h:299
generic_pool_ext(element *buffer, size_t size)
Constructor.
Definition generic_pool.h:234
U * create(const T1 &value1, const T2 &value2, const T3 &value3)
Definition generic_pool.h:131
U * create(const T1 &value1, const T2 &value2)
Definition generic_pool.h:118
U * create(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition generic_pool.h:312
U * create()
Definition generic_pool.h:260
void release(const void *const p_object)
Definition ipool.h:239
U * allocate()
Definition generic_pool.h:78
generic_pool()
Constructor.
Definition generic_pool.h:66
U * create(const T1 &value1, const T2 &value2)
Definition generic_pool.h:286
void destroy(const U *const p_object)
Definition generic_pool.h:169
U * create()
Definition generic_pool.h:92
U * allocate()
Definition generic_pool.h:246
void destroy(const U *const p_object)
Definition generic_pool.h:337
Definition generic_pool.h:56
Definition generic_pool.h:213
add_rvalue_reference
Definition type_traits_generator.h:1322
bitset_ext
Definition absolute.h:38
Definition alignment.h:233
pair holds two objects of arbitrary type
Definition utility.h:164