31#ifndef ETL_REFERENCE_COUNTED_MESSAGE_POOL_INCLUDED
32#define ETL_REFERENCE_COUNTED_MESSAGE_POOL_INCLUDED
38#include "reference_counted_message.h"
39#include "static_assert.h"
56 :
exception(reason_, file_name_, line_number_)
90 template <
typename TCounter>
99 : memory_block_allocator(memory_block_allocator_)
106 template <
typename TMessage>
112 typedef rcm_t* prcm_t;
114 prcm_t p = ETL_NULLPTR;
120 if (p != ETL_NULLPTR)
122 ::new(p) rcm_t(
message, *
this);
133 template <
typename TMessage>
139 typedef rcm_t* prcm_t;
141 prcm_t p = ETL_NULLPTR;
147 if (p != ETL_NULLPTR)
149 ::new(p) rcm_t(*
this);
162 bool released =
false;
165 if (memory_block_allocator.
is_owner_of(&rcmessage))
167 rcmessage.~ireference_counted_message();
168 released = memory_block_allocator.
release(&rcmessage);
177 template <
typename TMessage1,
typename... TMessages>
178 struct pool_message_parameters
186 static constexpr size_t size2 = pool_message_parameters<TMessages...>::max_size;
192 static constexpr size_t alignment2 = pool_message_parameters<TMessages...>::max_alignment;
197 static constexpr size_t max_size = (size1 < size2) ? size2 : size1;
200 static constexpr size_t max_alignment = (alignment1 < alignment2) ? alignment2 : alignment1;
204 template <
typename TMessage1>
205 struct pool_message_parameters<TMessage1>
219 template <
typename TMessage1,
typename TMessage2 = TMessage1,
typename TMessage3 = TMessage1,
typename TMessage4 = TMessage1,
220 typename TMessage5 = TMessage1,
typename TMessage6 = TMessage1,
typename TMessage7 = TMessage1,
typename TMessage8 = TMessage1>
266 template <
typename TCounter>
267 template <
typename TMessage1,
typename... TMessages>
270 template <
typename TCounter>
271 template <
typename TMessage1,
typename... TMessages>
276 template <
typename TCounter>
277 template <
typename TMessage1,
typename TMessage2,
typename TMessage3,
typename TMessage4,
278 typename TMessage5,
typename TMessage6,
typename TMessage7,
typename TMessage8>
281 template <
typename TCounter>
282 template <
typename TMessage1,
typename TMessage2,
typename TMessage3,
typename TMessage4,
283 typename TMessage5,
typename TMessage6,
typename TMessage7,
typename TMessage8>
288#if ETL_USING_CPP11 && ETL_HAS_ATOMIC
The interface for a memory block pool.
Definition: imemory_block_allocator.h:44
bool release(const void *const p)
Definition: imemory_block_allocator.h:81
bool is_owner_of(const void *const p) const
Definition: imemory_block_allocator.h:103
void * allocate(size_t required_size, size_t required_alignment)
Definition: imemory_block_allocator.h:58
Interface for a reference counted message pool.
Definition: ireference_counted_message_pool.h:44
virtual void unlock()
Definition: ireference_counted_message_pool.h:65
virtual void lock()
Definition: ireference_counted_message_pool.h:56
Definition: reference_counted_message.h:48
Exception if the allocation failed.
Definition: reference_counted_message_pool.h:65
Exception type for etl::reference_counted_message_pool.
Definition: reference_counted_message_pool.h:52
Exception if the release failed.
Definition: reference_counted_message_pool.h:78
A pool for allocating reference counted messages.
Definition: reference_counted_message_pool.h:92
void release(const etl::ireference_counted_message &rcmessage)
Destruct a message and send it back to the allocator.
Definition: reference_counted_message_pool.h:160
reference_counted_message_pool(etl::imemory_block_allocator &memory_block_allocator_)
Constructor.
Definition: reference_counted_message_pool.h:98
etl::reference_counted_message< TMessage, TCounter > * allocate(const TMessage &message)
Allocate a reference counted message from the pool.
Definition: reference_counted_message_pool.h:107
etl::reference_counted_message< TMessage, TCounter > * allocate()
Allocate a reference counted message from the pool.
Definition: reference_counted_message_pool.h:134
Definition: reference_counted_message.h:64
#define ETL_ASSERT(b, e)
Definition: error_handler.h:316
ETL_CONSTEXPR exception(string_type reason_, string_type, numeric_type line_)
Constructor.
Definition: exception.h:69
Definition: exception.h:47
Definition: largest.h:367
add_rvalue_reference
Definition: type_traits_generator.h:1327
is_base_of
Definition: type_traits_generator.h:1252
bitset_ext
Definition: absolute.h:38
size_t max_size() const
Returns the maximum number of items in the variant_pool.
Definition: variant_pool_generator.h:281
Definition: reference_counted_message_pool.h:222