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;
67 :
etl::
ipool(reinterpret_cast<char*>(&buffer[0]), Element_Size, VSize)
81 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
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");
104 template <
typename U,
typename T1>
108 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
117 template <
typename U,
typename T1,
typename T2>
118 U*
create(
const T1& value1,
const T2& value2)
121 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
130 template <
typename U,
typename T1,
typename T2,
typename T3>
131 U*
create(
const T1& value1,
const T2& value2,
const T3& value3)
134 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
143 template <
typename U,
typename T1,
typename T2,
typename T3,
typename T4>
144 U*
create(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
147 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
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");
182 char value[VTypeSize];
183 typename etl::type_with_alignment<VAlignment>::type dummy;
189 static ETL_CONSTANT uint32_t Element_Size =
sizeof(Element);
196 template <
size_t VTypeSize,
size_t VAlignment,
size_t VSize>
197 ETL_CONSTANT
size_t generic_pool<VTypeSize, VAlignment, VSize>::SIZE;
199 template <
size_t VTypeSize,
size_t VAlignment,
size_t VSize>
200 ETL_CONSTANT
size_t generic_pool<VTypeSize, VAlignment, VSize>::ALIGNMENT;
202 template <
size_t VTypeSize,
size_t VAlignment,
size_t VSize>
203 ETL_CONSTANT
size_t generic_pool<VTypeSize, VAlignment, VSize>::TYPE_SIZE;
210 template <
size_t VTypeSize,
size_t VAlignment>
215 union element_internal
218 char value[VTypeSize];
219 typename etl::type_with_alignment<VAlignment>::type dummy;
222 static const size_t ELEMENT_INTERNAL_SIZE =
sizeof(element_internal);
225 static ETL_CONSTANT
size_t ALIGNMENT = VAlignment;
226 static ETL_CONSTANT
size_t TYPE_SIZE = VTypeSize;
234 :
etl::
ipool(reinterpret_cast<char*>(&buffer[0]), ELEMENT_INTERNAL_SIZE,
size)
244 template <
typename U>
248 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
252#if ETL_CPP11_NOT_SUPPORTED || ETL_POOL_CPP03_CODE || ETL_USING_STLPORT
258 template <
typename U>
262 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
271 template <
typename U,
typename T1>
275 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
284 template <
typename U,
typename T1,
typename T2>
285 U*
create(
const T1& value1,
const T2& value2)
288 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
297 template <
typename U,
typename T1,
typename T2,
typename T3>
298 U*
create(
const T1& value1,
const T2& value2,
const T3& value3)
301 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
310 template <
typename U,
typename T1,
typename T2,
typename T3,
typename T4>
311 U*
create(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
314 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
321 template <
typename U,
typename... Args>
325 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
335 template <
typename U>
339 ETL_STATIC_ASSERT(
sizeof(U) <= VTypeSize,
"Type too large for pool");
349 template <
size_t VTypeSize,
size_t VAlignment>
350 ETL_CONSTANT
size_t generic_pool_ext<VTypeSize, VAlignment>::ALIGNMENT;
352 template <
size_t VTypeSize,
size_t VAlignment>
353 ETL_CONSTANT
size_t generic_pool_ext<VTypeSize, VAlignment>::TYPE_SIZE;
Definition alignment.h:246
size_t size() const
Returns the number of allocated items in the pool.
Definition ipool.h:504
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:272
U * create(const T1 &value1, const T2 &value2, const T3 &value3)
Definition generic_pool.h:298
generic_pool_ext(element *buffer, size_t size)
Constructor.
Definition generic_pool.h:233
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
T * allocate()
Definition ipool.h:316
U * create(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition generic_pool.h:311
U * create()
Definition generic_pool.h:259
ipool(char *p_buffer_, uint32_t item_size_, uint32_t max_size_)
Constructor.
Definition ipool.h:532
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:285
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:245
T * create()
Definition ipool.h:333
void destroy(const T *const p_object)
Definition ipool.h:425
void destroy(const U *const p_object)
Definition generic_pool.h:336
Definition generic_pool.h:212
add_rvalue_reference
Definition type_traits_generator.h:1413
bitset_ext
Definition absolute.h:39