SObjectizer  5.5
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
so_5::impl::limitless_mpsc_mbox_template< Tracing_Base > Class Template Reference

A multi-producer/single-consumer mbox definition. More...

#include <mpsc_mbox.hpp>

Inheritance diagram for so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >:
so_5::abstract_message_box_t so_5::atomic_refcounted_t so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >

Public Member Functions

template<typename... Tracing_Args>
 limitless_mpsc_mbox_template (mbox_id_t id, agent_t *single_consumer, Tracing_Args &&... tracing_args)
 
mbox_id_t id () const override
 Unique ID of this mbox. More...
 
void subscribe_event_handler (const std::type_index &, const message_limit::control_block_t *, agent_t &subscriber) override
 Add the message handler. More...
 
void unsubscribe_event_handlers (const std::type_index &, agent_t &subscriber) override
 Remove all message handlers. More...
 
std::string query_name () const override
 Get the mbox name. More...
 
mbox_type_t type () const override
 Get the type of message box. More...
 
void do_deliver_message (const std::type_index &msg_type, const message_ref_t &message, unsigned int overlimit_reaction_deep) override
 Deliver message for all subscribers with respect to message limits. More...
 
void set_delivery_filter (const std::type_index &, const delivery_filter_t &, agent_t &) override
 
void drop_delivery_filter (const std::type_index &, agent_t &) noexcept override
 Removes delivery filter for message type and subscriber. More...
 
environment_tenvironment () const noexcept override
 SObjectizer Environment for which the mbox is created. More...
 
- Public Member Functions inherited from so_5::abstract_message_box_t
 abstract_message_box_t ()=default
 
virtual ~abstract_message_box_t () noexcept=default
 
bool operator== (const abstract_message_box_t &o) const noexcept
 
bool operator< (const abstract_message_box_t &o) const noexcept
 

Protected Member Functions

template<typename L >
void do_delivery (typename Tracing_Base::deliver_op_tracer const &tracer, L l)
 Helper method to do delivery actions under locked object. More...
 
- Protected Member Functions inherited from so_5::abstract_message_box_t
virtual void do_deliver_message_from_timer (const std::type_index &msg_type, const message_ref_t &message)
 Special method for message delivery from a timer thread. More...
 
- Protected Member Functions inherited from so_5::atomic_refcounted_t
 atomic_refcounted_t (const atomic_refcounted_t &)=delete
 
atomic_refcounted_toperator= (const atomic_refcounted_t &)=delete
 
 atomic_refcounted_t () noexcept
 Default constructor. More...
 
 ~atomic_refcounted_t () noexcept=default
 Destructor. More...
 
void inc_ref_count () noexcept
 Increments reference count. More...
 
unsigned long dec_ref_count () noexcept
 Decrement reference count. More...
 

Protected Attributes

const mbox_id_t m_id
 ID of this mbox. More...
 
agent_tm_single_consumer
 The only consumer of this mbox's messages. More...
 
default_rw_spinlock_t m_lock
 Protection of object from modification. More...
 
std::size_t m_subscriptions_count = 0
 Number of active subscriptions. More...
 

Additional Inherited Members

- Static Protected Member Functions inherited from so_5::abstract_message_box_t
static void delegate_deliver_message_from_timer (abstract_message_box_t &mbox, const std::type_index &msg_type, const message_ref_t &message)
 Helper for calling do_deliver_message_from_timer in derived classes. More...
 

Detailed Description

template<typename Tracing_Base>
class so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >

A multi-producer/single-consumer mbox definition.

Since
v.5.4.0
Note
Since v.5.5.4 is used for implementation of direct mboxes without controling message limits.
Renamed from limitless_mpsc_mbox_t to limitless_mpsc_mbox_template in v.5.5.9.

Constructor & Destructor Documentation

◆ limitless_mpsc_mbox_template()

template<typename Tracing_Base >
template<typename... Tracing_Args>
so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::limitless_mpsc_mbox_template ( mbox_id_t  id,
agent_t single_consumer,
Tracing_Args &&...  tracing_args 
)
inline

Member Function Documentation

◆ do_deliver_message()

template<typename Tracing_Base >
void so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::do_deliver_message ( const std::type_index &  msg_type,
const message_ref_t message,
unsigned int  overlimit_reaction_deep 
)
inlineoverridevirtual

Deliver message for all subscribers with respect to message limits.

Since
v.5.5.4
Note
Since v.5.6.0 this method is used for deliverance of ordinary messages/signals and for deliverance of enveloped messages.

Implements so_5::abstract_message_box_t.

Reimplemented in so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >.

◆ do_delivery()

template<typename Tracing_Base >
template<typename L >
void so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::do_delivery ( typename Tracing_Base::deliver_op_tracer const &  tracer,
l 
)
inlineprotected

Helper method to do delivery actions under locked object.

Since
v.5.5.9
Template Parameters
Llambda with actual delivery actions.
Parameters
tracerTracer object to log the case of abscense of subscriptions.
lLambda with actual delivery actions.

◆ drop_delivery_filter()

template<typename Tracing_Base >
void so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::drop_delivery_filter ( const std::type_index &  msg_type,
agent_t subscriber 
)
inlineoverridevirtualnoexcept

Removes delivery filter for message type and subscriber.

Since
v.5.5.5

Implements so_5::abstract_message_box_t.

◆ environment()

template<typename Tracing_Base >
environment_t& so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::environment ( ) const
inlineoverridevirtualnoexcept

SObjectizer Environment for which the mbox is created.

Since
v.5.6.0

Implements so_5::abstract_message_box_t.

◆ id()

template<typename Tracing_Base >
mbox_id_t so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::id ( ) const
inlineoverridevirtual

Unique ID of this mbox.

Since
v.5.4.0

Implements so_5::abstract_message_box_t.

◆ query_name()

template<typename Tracing_Base >
std::string so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::query_name ( ) const
inlineoverridevirtual

Get the mbox name.

Implements so_5::abstract_message_box_t.

◆ set_delivery_filter()

template<typename Tracing_Base >
void so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::set_delivery_filter ( const std::type_index &  ,
const delivery_filter_t ,
agent_t  
)
inlineoverridevirtual
Attention
Will throw an exception because delivery filter is not applicable to MPSC-mboxes.

Implements so_5::abstract_message_box_t.

◆ subscribe_event_handler()

template<typename Tracing_Base >
void so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::subscribe_event_handler ( const std::type_index &  type_index,
const message_limit::control_block_t limit,
agent_t subscriber 
)
inlineoverridevirtual

Add the message handler.

Implements so_5::abstract_message_box_t.

◆ type()

template<typename Tracing_Base >
mbox_type_t so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::type ( ) const
inlineoverridevirtual

Get the type of message box.

Since
v.5.5.3
Note
This method is primarily intended for internal usage. It is useful sometimes in subscription-related operations because there is no need to do some actions for MPSC mboxes.

Implements so_5::abstract_message_box_t.

◆ unsubscribe_event_handlers()

template<typename Tracing_Base >
void so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::unsubscribe_event_handlers ( const std::type_index &  type_index,
agent_t subscriber 
)
inlineoverridevirtual

Remove all message handlers.

Implements so_5::abstract_message_box_t.

Member Data Documentation

◆ m_id

template<typename Tracing_Base >
const mbox_id_t so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::m_id
protected

ID of this mbox.

◆ m_lock

template<typename Tracing_Base >
default_rw_spinlock_t so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::m_lock
protected

Protection of object from modification.

Since
v.5.5.9

◆ m_single_consumer

template<typename Tracing_Base >
agent_t* so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::m_single_consumer
protected

The only consumer of this mbox's messages.

◆ m_subscriptions_count

template<typename Tracing_Base >
std::size_t so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::m_subscriptions_count = 0
protected

Number of active subscriptions.

Since
v.5.5.9
Note
If zero then all attempts to deliver message or service request will be ignored.

The documentation for this class was generated from the following file: