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");
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
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;
244 template <
typename U>
248 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
249 return ipool::allocate<U>();
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");
263 return ipool::create<U>();
271 template <
typename U,
typename T1>
275 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
276 return ipool::create<U>(value1);
284 template <
typename U,
typename T1,
typename T2>
288 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
289 return ipool::create<U>(value1, value2);
297 template <
typename U,
typename T1,
typename T2,
typename T3>
301 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
302 return ipool::create<U>(value1, value2, value3);
310 template <
typename U,
typename T1,
typename T2,
typename T3,
typename T4>
314 ETL_STATIC_ASSERT(
sizeof(
U) <=
VTypeSize,
"Type too large for pool");
315 return ipool::create<U>(value1, value2, value3, value4);
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
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
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
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:56
Definition generic_pool.h:212
add_rvalue_reference
Definition type_traits_generator.h:1413
bitset_ext
Definition absolute.h:39
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:315
Definition alignment.h:248