SObjectizer  5.7
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Types | List of all members
so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage > Class Template Reference

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

#include <mpsc_mbox.hpp>

Inheritance diagram for so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >:
so_5::abstract_message_box_t so_5::atomic_refcounted_t

Public Member Functions

template<typename... Tracing_Args>
 mpsc_mbox_template_t (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 &msg_type, const message_limit::control_block_t *limit, agent_t &subscriber) override
 Add the message handler. More...
 
void unsubscribe_event_handlers (const std::type_index &msg_type, 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 &msg_type, const delivery_filter_t &filter, agent_t &subscriber) override
 Set a delivery filter for message type and subscriber. More...
 
void drop_delivery_filter (const std::type_index &msg_type, agent_t &subscriber) 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 Types

using subscription_info_t = local_mbox_details::basic_subscription_info_t
 Information related to a subscribed message type. More...
 
using subscriptions_map_t = std::map< std::type_index, subscription_info_t >
 Type of dictionary for information about the current subscriptions. More...
 

Protected Member Functions

template<typename Info_Maker , typename Info_Changer >
void insert_or_modify_subscription (const std::type_index &msg_type, Info_Maker maker, Info_Changer changer)
 Helper for performing insertion or modification of subscription info. More...
 
template<typename Info_Changer >
void modify_and_remove_subscription_if_needed (const std::type_index &msg_type, Info_Changer changer)
 Helper for modification and deletion of subscription info. More...
 
template<typename L >
void do_delivery (const std::type_index &msg_type, const message_ref_t &message, 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...
 
subscriptions_map_t m_subscriptions
 Information about the current subscriptions. More...
 

Private Types

using limits_selector_t = std::conditional_t< mpsc_mbox_message_limits_usage_t::use==message_limits_usage, mpsc_mbox_with_message_limits_t, mpsc_mbox_without_message_limits_t >
 

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, mpsc_mbox_message_limits_usage_t message_limits_usage>
class so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >

A multi-producer/single-consumer mbox definition.

Since
v.5.4.0, v.5.7.1
Note
Renamed from limitful_mpsc_mbox_t to limitful_mpsc_mbox_template in v.5.5.9.
Renamed from limitful_mpsc_mbox_template to limitful_mpsc_mbox_template_t in v.5.7.1.
Renamed from limitful_mpsc_mbox_template_t to mpsc_mbox_template_t in v.5.7.4.

Member Typedef Documentation

◆ limits_selector_t

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
using so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::limits_selector_t = std::conditional_t< mpsc_mbox_message_limits_usage_t::use == message_limits_usage, mpsc_mbox_with_message_limits_t, mpsc_mbox_without_message_limits_t >
private

◆ subscription_info_t

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
using so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::subscription_info_t = local_mbox_details::basic_subscription_info_t
protected

Information related to a subscribed message type.

Since
v.5.7.4

◆ subscriptions_map_t

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
using so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::subscriptions_map_t = std::map< std::type_index, subscription_info_t >
protected

Type of dictionary for information about the current subscriptions.

Since
v.5.7.1

Constructor & Destructor Documentation

◆ mpsc_mbox_template_t()

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

Member Function Documentation

◆ do_deliver_message()

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
void so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::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.

◆ do_delivery()

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
template<typename L >
void so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::do_delivery ( const std::type_index &  msg_type,
const message_ref_t message,
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
msg_typeType of message/signal to be delivered.
messageMessage object to be delivered.
tracerTracer object to log the case of abscense of subscriptions.
lLambda with actual delivery actions.

◆ drop_delivery_filter()

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
void so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::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 , mpsc_mbox_message_limits_usage_t message_limits_usage>
environment_t& so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::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 , mpsc_mbox_message_limits_usage_t message_limits_usage>
mbox_id_t so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::id ( ) const
inlineoverridevirtual

Unique ID of this mbox.

Since
v.5.4.0

Implements so_5::abstract_message_box_t.

◆ insert_or_modify_subscription()

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
template<typename Info_Maker , typename Info_Changer >
void so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::insert_or_modify_subscription ( const std::type_index &  msg_type,
Info_Maker  maker,
Info_Changer  changer 
)
inlineprotected

Helper for performing insertion or modification of subscription info.

Since
v.5.7.4

◆ modify_and_remove_subscription_if_needed()

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
template<typename Info_Changer >
void so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::modify_and_remove_subscription_if_needed ( const std::type_index &  msg_type,
Info_Changer  changer 
)
inlineprotected

Helper for modification and deletion of subscription info.

Since
v.5.7.4

◆ query_name()

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
std::string so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::query_name ( ) const
inlineoverridevirtual

Get the mbox name.

Implements so_5::abstract_message_box_t.

◆ set_delivery_filter()

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
void so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::set_delivery_filter ( const std::type_index &  msg_type,
const delivery_filter_t filter,
agent_t subscriber 
)
inlineoverridevirtual

Set a delivery filter for message type and subscriber.

Since
v.5.5.5
Note
If there already is a delivery filter for that (msg_type,subscriber) pair then old delivery filter will be replaced by new one.

Implements so_5::abstract_message_box_t.

◆ subscribe_event_handler()

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
void so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::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 , mpsc_mbox_message_limits_usage_t message_limits_usage>
mbox_type_t so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::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 , mpsc_mbox_message_limits_usage_t message_limits_usage>
void so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::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 , mpsc_mbox_message_limits_usage_t message_limits_usage>
const mbox_id_t so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::m_id
protected

ID of this mbox.

◆ m_lock

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
default_rw_spinlock_t so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::m_lock
protected

Protection of object from modification.

Since
v.5.5.9

◆ m_single_consumer

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
agent_t* so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::m_single_consumer
protected

The only consumer of this mbox's messages.

◆ m_subscriptions

template<typename Tracing_Base , mpsc_mbox_message_limits_usage_t message_limits_usage>
subscriptions_map_t so_5::impl::mpsc_mbox_template_t< Tracing_Base, message_limits_usage >::m_subscriptions
protected

Information about the current subscriptions.

Since
v.5.7.1

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