SObjectizer  5.5
Public Member Functions | Private Member Functions | List of all members
so_5::impl::local_mbox_template< Tracing_Base > Class Template Reference

A template with implementation of local mbox. More...

#include <local_mbox.hpp>

Inheritance diagram for so_5::impl::local_mbox_template< Tracing_Base >:
so_5::abstract_message_box_t so_5::impl::local_mbox_details::data_t so_5::atomic_refcounted_t

Public Member Functions

template<typename... Tracing_Args>
 local_mbox_template (mbox_id_t id, environment_t &env, Tracing_Args &&... args)
 
mbox_id_t id () const override
 Unique ID of this mbox. More...
 
void subscribe_event_handler (const std::type_index &type_wrapper, const so_5::message_limit::control_block_t *limit, agent_t &subscriber) override
 Add the message handler. More...
 
void unsubscribe_event_handlers (const std::type_index &type_wrapper, 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
 

Private Member Functions

template<typename Info_Maker , typename Info_Changer >
void insert_or_modify_subscriber (const std::type_index &type_wrapper, agent_t *subscriber, Info_Maker maker, Info_Changer changer)
 
template<typename Info_Changer >
void modify_and_remove_subscriber_if_needed (const std::type_index &type_wrapper, agent_t *subscriber, Info_Changer changer)
 
void do_deliver_message_impl (typename Tracing_Base::deliver_op_tracer const &tracer, const std::type_index &msg_type, const message_ref_t &message, unsigned int overlimit_reaction_deep)
 
void do_deliver_message_to_subscriber (const local_mbox_details::subscriber_info_t &agent_info, typename Tracing_Base::deliver_op_tracer const &tracer, const std::type_index &msg_type, const message_ref_t &message, unsigned int overlimit_reaction_deep) const
 
void ensure_immutable_message (const std::type_index &msg_type, const message_ref_t &what) const
 Ensures that message is an immutable message. More...
 
- Private Member Functions inherited from so_5::impl::local_mbox_details::data_t
 data_t (mbox_id_t id, environment_t &env)
 

Additional Inherited Members

- 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...
 
- 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...
 
- Private Types inherited from so_5::impl::local_mbox_details::data_t
using messages_table_t = std::map< std::type_index, subscriber_adaptive_container_t >
 Map from message type to subscribers. More...
 
- Private Attributes inherited from so_5::impl::local_mbox_details::data_t
const mbox_id_t m_id
 ID of this mbox. More...
 
environment_tm_env
 Environment for which the mbox is created. More...
 
default_rw_spinlock_t m_lock
 Object lock. More...
 
messages_table_t m_subscribers
 Map of subscribers to messages. More...
 

Detailed Description

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

A template with implementation of local mbox.

Since
v.5.5.9
Template Parameters
Tracing_Basebase class with implementation of message delivery tracing methods.

Constructor & Destructor Documentation

◆ local_mbox_template()

template<typename Tracing_Base >
template<typename... Tracing_Args>
so_5::impl::local_mbox_template< Tracing_Base >::local_mbox_template ( mbox_id_t  id,
environment_t env,
Tracing_Args &&...  args 
)
inline
Parameters
idID of this mbox.
envEnvironment for which the mbox is created.
argsOptional parameters for Tracing_Base's constructor.

Member Function Documentation

◆ do_deliver_message()

template<typename Tracing_Base >
void so_5::impl::local_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.

◆ do_deliver_message_impl()

template<typename Tracing_Base >
void so_5::impl::local_mbox_template< Tracing_Base >::do_deliver_message_impl ( typename Tracing_Base::deliver_op_tracer const &  tracer,
const std::type_index &  msg_type,
const message_ref_t message,
unsigned int  overlimit_reaction_deep 
)
inlineprivate

◆ do_deliver_message_to_subscriber()

template<typename Tracing_Base >
void so_5::impl::local_mbox_template< Tracing_Base >::do_deliver_message_to_subscriber ( const local_mbox_details::subscriber_info_t agent_info,
typename Tracing_Base::deliver_op_tracer const &  tracer,
const std::type_index &  msg_type,
const message_ref_t message,
unsigned int  overlimit_reaction_deep 
) const
inlineprivate

◆ drop_delivery_filter()

template<typename Tracing_Base >
void so_5::impl::local_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.

◆ ensure_immutable_message()

template<typename Tracing_Base >
void so_5::impl::local_mbox_template< Tracing_Base >::ensure_immutable_message ( const std::type_index &  msg_type,
const message_ref_t what 
) const
inlineprivate

Ensures that message is an immutable message.

Checks mutability flag and throws an exception if message is a mutable one.

Since
v.5.5.19

◆ environment()

template<typename Tracing_Base >
environment_t& so_5::impl::local_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::local_mbox_template< Tracing_Base >::id ( ) const
inlineoverridevirtual

Unique ID of this mbox.

Since
v.5.4.0

Implements so_5::abstract_message_box_t.

◆ insert_or_modify_subscriber()

template<typename Tracing_Base >
template<typename Info_Maker , typename Info_Changer >
void so_5::impl::local_mbox_template< Tracing_Base >::insert_or_modify_subscriber ( const std::type_index &  type_wrapper,
agent_t subscriber,
Info_Maker  maker,
Info_Changer  changer 
)
inlineprivate

◆ modify_and_remove_subscriber_if_needed()

template<typename Tracing_Base >
template<typename Info_Changer >
void so_5::impl::local_mbox_template< Tracing_Base >::modify_and_remove_subscriber_if_needed ( const std::type_index &  type_wrapper,
agent_t subscriber,
Info_Changer  changer 
)
inlineprivate

◆ query_name()

template<typename Tracing_Base >
std::string so_5::impl::local_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::local_mbox_template< Tracing_Base >::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 >
void so_5::impl::local_mbox_template< Tracing_Base >::subscribe_event_handler ( const std::type_index &  type_index,
const so_5::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::local_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::local_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.


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