SObjectizer  5.8
Loading...
Searching...
No Matches
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.
 
void subscribe_event_handler (const std::type_index &type_wrapper, abstract_message_sink_t &subscriber) override
 Add the message handler.
 
void unsubscribe_event_handler (const std::type_index &type_wrapper, abstract_message_sink_t &subscriber) noexcept override
 Remove all message handlers.
 
std::string query_name () const override
 Get the mbox name.
 
mbox_type_t type () const override
 Get the type of message box.
 
void do_deliver_message (message_delivery_mode_t delivery_mode, const std::type_index &msg_type, const message_ref_t &message, unsigned int redirection_deep) override
 Deliver message for all subscribers with respect to message limits.
 
void set_delivery_filter (const std::type_index &msg_type, const delivery_filter_t &filter, abstract_message_sink_t &subscriber) override
 Set a delivery filter for message type and subscriber.
 
void drop_delivery_filter (const std::type_index &msg_type, abstract_message_sink_t &subscriber) noexcept override
 Removes delivery filter for message type and subscriber.
 
environment_tenvironment () const noexcept override
 SObjectizer Environment for which the mbox is created.
 
- Public Member Functions inherited from so_5::abstract_message_box_t
 abstract_message_box_t ()=default
 
virtual ~abstract_message_box_t () noexcept=default
 

Private Member Functions

template<typename Info_Maker , typename Info_Changer >
void insert_or_modify_subscriber (const std::type_index &type_wrapper, abstract_message_sink_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, abstract_message_sink_t &subscriber, Info_Changer changer)
 
void do_deliver_message_impl (typename Tracing_Base::deliver_op_tracer const &tracer, message_delivery_mode_t delivery_mode, const std::type_index &msg_type, const message_ref_t &message, unsigned int redirection_deep)
 
void do_deliver_message_to_subscriber (const local_mbox_details::subscription_info_with_sink_t &subscriber_info, typename Tracing_Base::deliver_op_tracer const &tracer, message_delivery_mode_t delivery_mode, const std::type_index &msg_type, const message_ref_t &message, unsigned int redirection_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.
 
- 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::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.
 
 ~atomic_refcounted_t () noexcept=default
 Destructor.
 
void inc_ref_count () noexcept
 Increments reference count.
 
unsigned long dec_ref_count () noexcept
 Decrement reference count.
 
- Private Types inherited from so_5::impl::local_mbox_details::data_t
using messages_table_t
 Map from message type to subscribers.
 
- Private Attributes inherited from so_5::impl::local_mbox_details::data_t
const mbox_id_t m_id
 ID of this mbox.
 
environment_tm_env
 Environment for which the mbox is created.
 
default_rw_spinlock_t m_lock
 Object lock.
 
messages_table_t m_subscribers
 Map of subscribers to messages.
 

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.

Definition at line 643 of file local_mbox.hpp.

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.

Definition at line 650 of file local_mbox.hpp.

Member Function Documentation

◆ do_deliver_message()

template<typename Tracing_Base >
void so_5::impl::local_mbox_template< Tracing_Base >::do_deliver_message ( message_delivery_mode_t delivery_mode,
const std::type_index & msg_type,
const message_ref_t & message,
unsigned int redirection_deep )
inlineoverridevirtual

Deliver message for all subscribers with respect to message limits.

Since
v.5.5.4

A message delivery from timer thread is somewhat different from an ordinary message delivery. Especially in the case when target mbox is a message chain. If that message chain is full and some kind of overflow reaction is specified (like waiting for some time or throwing an exception) then it can lead to undesired behaviour of the whole application. To take care about these cases a new method is introduced.

Note
Since v.5.6.0 this method is used for deliverance of ordinary messages/signals and for deliverance of enveloped messages.
Parameters
delivery_modeCan the delivery blocks the current thread?
msg_typeType of the message to deliver.
messageA message instance to be delivered.
redirection_deepCurrent deep of overlimit reaction recursion.

Implements so_5::abstract_message_box_t.

Definition at line 714 of file local_mbox.hpp.

◆ 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,
message_delivery_mode_t delivery_mode,
const std::type_index & msg_type,
const message_ref_t & message,
unsigned int redirection_deep )
inlineprivate

Definition at line 847 of file local_mbox.hpp.

◆ 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::subscription_info_with_sink_t & subscriber_info,
typename Tracing_Base::deliver_op_tracer const & tracer,
message_delivery_mode_t delivery_mode,
const std::type_index & msg_type,
const message_ref_t & message,
unsigned int redirection_deep ) const
inlineprivate

Definition at line 873 of file local_mbox.hpp.

◆ 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,
abstract_message_sink_t & subscriber )
inlineoverridevirtualnoexcept

Removes delivery filter for message type and subscriber.

Since
v.5.5.5

Implements so_5::abstract_message_box_t.

Definition at line 759 of file local_mbox.hpp.

◆ 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

Definition at line 913 of file local_mbox.hpp.

◆ 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.

Definition at line 772 of file local_mbox.hpp.

◆ 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.

Definition at line 662 of file local_mbox.hpp.

◆ 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,
abstract_message_sink_t & subscriber,
Info_Maker maker,
Info_Changer changer )
inlineprivate

Definition at line 780 of file local_mbox.hpp.

◆ 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,
abstract_message_sink_t & subscriber,
Info_Changer changer )
inlineprivate

Definition at line 817 of file local_mbox.hpp.

◆ 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.

Definition at line 699 of file local_mbox.hpp.

◆ 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,
abstract_message_sink_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.
Parameters
msg_typeMessage type to be filtered.
filterFilter to be set. A caller must guaranted the validity of this reference.
subscriberA subscriber for the message.

Implements so_5::abstract_message_box_t.

Definition at line 740 of file local_mbox.hpp.

◆ 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,
abstract_message_sink_t & subscriber )
inlineoverridevirtual

Add the message handler.

Parameters
type_indexMessage type.
subscriberSubscriber.

Implements so_5::abstract_message_box_t.

Definition at line 668 of file local_mbox.hpp.

◆ 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.

Definition at line 708 of file local_mbox.hpp.

◆ unsubscribe_event_handler()

template<typename Tracing_Base >
void so_5::impl::local_mbox_template< Tracing_Base >::unsubscribe_event_handler ( const std::type_index & type_index,
abstract_message_sink_t & subscriber )
inlineoverridevirtualnoexcept

Remove all message handlers.

Parameters
type_indexMessage type.
subscriberSubscriber.

Implements so_5::abstract_message_box_t.

Definition at line 686 of file local_mbox.hpp.


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