29#ifndef ETL_REFERENCE_COUNTED_MESSAGE_INCLUDED
30#define ETL_REFERENCE_COUNTED_MESSAGE_INCLUDED
35#include "reference_counted_object.h"
36#include "static_assert.h"
62 template <
typename TMessage,
typename TCounter>
69 typedef TMessage message_type;
70 typedef TCounter counter_type;
78 template <
typename... TArgs>
80 : rc_object(etl::forward<TArgs>(args)...)
103 return rc_object.get_object();
110 ETL_NODISCARD
virtual const TMessage&
get_message() const ETL_OVERRIDE
112 return rc_object.get_object();
121 return rc_object.get_reference_counter();
130 return rc_object.get_reference_counter();
139 owner.release(*
this);
151 template <
typename TMessage>
158 typedef TMessage message_type;
159 typedef void counter_type;
176 return rc_object.get_object();
183 ETL_NODISCARD
virtual const TMessage&
get_message() const ETL_OVERRIDE
185 return rc_object.get_object();
194 return rc_object.get_reference_counter();
203 return rc_object.get_reference_counter();
220#if ETL_USING_CPP11 && ETL_HAS_ATOMIC
225 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
Get a reference to the reference counter.
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:73
virtual ETL_NODISCARD etl::ireference_counter & get_reference_counter() ETL_OVERRIDE
Definition reference_counted_message.h:192
virtual ETL_NODISCARD const etl::ireference_counter & get_reference_counter() const ETL_OVERRIDE
Definition reference_counted_message.h:201
virtual ETL_NODISCARD TMessage & get_message() ETL_OVERRIDE
Definition reference_counted_message.h:174
virtual void release() ETL_OVERRIDE
Definition reference_counted_message.h:210
virtual ETL_NODISCARD const TMessage & get_message() const ETL_OVERRIDE
Definition reference_counted_message.h:183
persistent_message(const TMessage &msg_)
Definition reference_counted_message.h:165
Definition reference_counted_message.h:64
virtual ETL_NODISCARD etl::ireference_counter & get_reference_counter() ETL_OVERRIDE
Definition reference_counted_message.h:119
virtual ETL_NODISCARD const TMessage & get_message() const ETL_OVERRIDE
Definition reference_counted_message.h:110
virtual ETL_NODISCARD const etl::ireference_counter & get_reference_counter() const ETL_OVERRIDE
Definition reference_counted_message.h:128
virtual ETL_NODISCARD TMessage & get_message() ETL_OVERRIDE
Definition reference_counted_message.h:101
reference_counted_message(const TMessage &msg_, etl::ireference_counted_message_pool &owner_)
Definition reference_counted_message.h:91
virtual void release() ETL_OVERRIDE
Definition reference_counted_message.h:137
Definition reference_counted_object.h:206
is_base_of
Definition type_traits_generator.h:1315
bitset_ext
Definition absolute.h:39