29#ifndef ETL_REFERENCE_COUNTED_MESSAGE_INCLUDED
30#define ETL_REFERENCE_COUNTED_MESSAGE_INCLUDED
36#include "reference_counted_object.h"
37#include "static_assert.h"
67 template <
typename TMessage,
typename TCounter>
72 ETL_STATIC_ASSERT((etl::is_base_of<etl::imessage, TMessage>::value),
"Not a message type");
74 typedef TMessage message_type;
75 typedef TCounter counter_type;
83 template <
typename... TArgs>
85 : rc_object(etl::forward<TArgs>(args)...)
109 return rc_object.get_object();
119 return rc_object.get_object();
129 return rc_object.get_reference_counter();
139 return rc_object.get_reference_counter();
148 owner.release(*
this);
160 template <
typename TMessage>
165 ETL_STATIC_ASSERT((etl::is_base_of<etl::imessage, TMessage>::value),
"Not a message type");
167 typedef TMessage message_type;
168 typedef void counter_type;
186 return rc_object.get_object();
196 return rc_object.get_object();
206 return rc_object.get_reference_counter();
216 return rc_object.get_reference_counter();
233#if ETL_USING_CPP11 && ETL_HAS_ATOMIC
238 template <
typename TMessage>
Interface for a reference counted message pool.
Definition ireference_counted_message_pool.h:44
Definition reference_counted_message.h:48
virtual ETL_NODISCARD const etl::imessage & get_message() const =0
Get a const reference to the message.
virtual ETL_NODISCARD etl::ireference_counter & get_reference_counter()=0
virtual ETL_NODISCARD etl::imessage & get_message()=0
Get a reference to the message.
virtual ETL_NODISCARD const etl::ireference_counter & get_reference_counter() const =0
Get a const reference to the reference counter.
virtual void release()=0
Release back to the owner.
The base of all reference counters.
Definition reference_counted_object.h:76
virtual ETL_NODISCARD etl::ireference_counter & get_reference_counter() ETL_OVERRIDE
Definition reference_counted_message.h:204
virtual ETL_NODISCARD const etl::ireference_counter & get_reference_counter() const ETL_OVERRIDE
Definition reference_counted_message.h:214
virtual ETL_NODISCARD TMessage & get_message() ETL_OVERRIDE
Definition reference_counted_message.h:184
virtual void release() ETL_OVERRIDE
Definition reference_counted_message.h:223
virtual ETL_NODISCARD const TMessage & get_message() const ETL_OVERRIDE
Definition reference_counted_message.h:194
persistent_message(const TMessage &msg_)
Definition reference_counted_message.h:174
Definition reference_counted_message.h:69
virtual ETL_NODISCARD etl::ireference_counter & get_reference_counter() ETL_OVERRIDE
Definition reference_counted_message.h:127
virtual ETL_NODISCARD const TMessage & get_message() const ETL_OVERRIDE
Definition reference_counted_message.h:117
virtual ETL_NODISCARD const etl::ireference_counter & get_reference_counter() const ETL_OVERRIDE
Definition reference_counted_message.h:137
virtual ETL_NODISCARD TMessage & get_message() ETL_OVERRIDE
Definition reference_counted_message.h:107
reference_counted_message(const TMessage &msg_, etl::ireference_counted_message_pool &owner_)
Definition reference_counted_message.h:96
virtual void release() ETL_OVERRIDE
Definition reference_counted_message.h:146
Definition reference_counted_object.h:217
bitset_ext
Definition absolute.h:40