SObjectizer  5.8
Loading...
Searching...
No Matches
so_5::abstract_message_chain_t Class Referenceabstract

An interface of message chain. More...

#include <mchain.hpp>

Inheritance diagram for so_5::abstract_message_chain_t:
so_5::abstract_message_box_t so_5::atomic_refcounted_t so_5::mchain_props::mchain_template< Queue, Tracing_Base >

Public Member Functions

virtual mchain_props::extraction_status_t extract (mchain_props::demand_t &dest, mchain_props::duration_t empty_queue_timeout)=0
 
so_5::mbox_t as_mbox ()
 Cast message chain to message box.
 
virtual bool empty () const =0
 Is message chain empty?
 
virtual std::size_t size () const =0
 Count of messages in the chain.
 
template<typename Exceptions_Control >
void close (Exceptions_Control, mchain_props::close_mode_t mode) noexcept(noexcept(details::should_terminate_if_throws_t< Exceptions_Control >::value))
 Close the chain.
 
virtual mbox_id_t id () const=0
 Unique ID of this mbox.
 
virtual so_5::environment_tenvironment () const noexcept=0
 SObjectizer Environment for which the mbox is created.
 

Protected Member Functions

 abstract_message_chain_t ()=default
 
 ~abstract_message_chain_t () noexcept override=default
 
virtual mchain_props::extraction_status_t extract (mchain_props::demand_t &dest, mchain_props::select_case_t &select_case)=0
 An extraction attempt as a part of multi chain select.
 
virtual mchain_props::push_status_t push (const std::type_index &msg_type, const message_ref_t &message, mchain_props::select_case_t &select_case)=0
 An attempt to push a new message into the mchain.
 
virtual void remove_from_select (mchain_props::select_case_t &select_case) noexcept=0
 Removement of mchain from multi chain select.
 
virtual void actual_close (mchain_props::close_mode_t mode)=0
 Close the chain.
 
- Protected Member Functions inherited from so_5::abstract_message_box_t
 abstract_message_box_t ()=default
 
virtual ~abstract_message_box_t () noexcept=default
 
virtual void subscribe_event_handler (const std::type_index &type_index, abstract_message_sink_t &subscriber)=0
 Add the message handler.
 
virtual void unsubscribe_event_handler (const std::type_index &type_index, abstract_message_sink_t &subscriber) noexcept=0
 Remove all message handlers.
 
virtual std::string query_name () const =0
 Get the mbox name.
 
virtual mbox_type_t type () const =0
 Get the type of message box.
 
virtual 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)=0
 Deliver message for all subscribers with respect to message limits.
 
virtual void set_delivery_filter (const std::type_index &msg_type, const delivery_filter_t &filter, abstract_message_sink_t &subscriber)=0
 Set a delivery filter for message type and subscriber.
 
virtual void drop_delivery_filter (const std::type_index &msg_type, abstract_message_sink_t &subscriber) noexcept=0
 Removes delivery filter for message type and subscriber.
 
- 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 Member Functions

 abstract_message_chain_t (const abstract_message_chain_t &)=delete
 
abstract_message_chain_toperator= (const abstract_message_chain_t &)=delete
 

Friends

class intrusive_ptr_t< abstract_message_chain_t >
 
class mchain_props::select_case_t
 

Detailed Description

An interface of message chain.

Since
v.5.5.13

Definition at line 458 of file mchain.hpp.

Constructor & Destructor Documentation

◆ abstract_message_chain_t() [1/2]

so_5::abstract_message_chain_t::abstract_message_chain_t ( const abstract_message_chain_t & )
privatedelete

◆ abstract_message_chain_t() [2/2]

so_5::abstract_message_chain_t::abstract_message_chain_t ( )
protecteddefault

◆ ~abstract_message_chain_t()

so_5::abstract_message_chain_t::~abstract_message_chain_t ( )
overrideprotecteddefaultnoexcept

Member Function Documentation

◆ actual_close()

virtual void so_5::abstract_message_chain_t::actual_close ( mchain_props::close_mode_t mode)
protectedpure virtual

Close the chain.

Attention
This method can throw exception.
Since
v.5.7.3
Parameters
modeWhat to do with chain's content.

Implemented in so_5::mchain_props::mchain_template< Queue, Tracing_Base >.

◆ as_mbox()

mbox_t so_5::abstract_message_chain_t::as_mbox ( )
nodiscard

Cast message chain to message box.

Definition at line 20 of file mchain.cpp.

◆ close()

template<typename Exceptions_Control >
void so_5::abstract_message_chain_t::close ( Exceptions_Control ,
mchain_props::close_mode_t mode )
inlinenoexcept

Close the chain.

Since v.5.7.3 this is the recommended way of closing a mchain. This method allows to specify how exceptions have to be treated:

auto ch1 = so_5::create_mchain(env);
auto ch2 = so_5::create_mchain(env);
...
// Enable exceptions during 'close' operation.
ch1->close(
// Terminate the application if 'close' operation throws.
ch2->close(
@ drop_content
All messages must be removed from chain.
mchain_t create_mchain(environment_t &env)
Create size-unlimited chain.
constexpr terminate_if_throws_t terminate_if_throws
Value that indicates that an exception leads to the termination of the whole application.
constexpr exceptions_enabled_t exceptions_enabled
Value that indicates that exceptions are enabled.

This method was introduced because 'close' operation can throw but it's not obvious enough. Because 'close' can throw additional care has to be taken when 'close' is initiated in noexcept-contexts (like destructor and, often, in catch-blocks). This new method allows expressing intentions more clearly. For example:

class some_class {
...
public:
some_class(so_5::environment_t & env)
: ch_{so_5::create_mchain(env)}
{}
~some_class() noexcept
{
// There is no sense to allow exceptions during close operation.
ch_->close(
}
...
};
...
void some_function(so_5::environment_t & env)
{
auto ch = so_5::create_mchain(env);
...
// Have to close ch.
// This is not noexcept-context, so we can allow exceptions.
ch_->close(
...
}
void close(Exceptions_Control, mchain_props::close_mode_t mode) noexcept(noexcept(details::should_terminate_if_throws_t< Exceptions_Control >::value))
Close the chain.
Definition mchain.hpp:557
SObjectizer Environment.
Private part of message limit implementation.
Definition agent.cpp:33
Since
v.5.7.3
Parameters
modeWhat to do with chain's content.

Definition at line 557 of file mchain.hpp.

◆ empty()

virtual bool so_5::abstract_message_chain_t::empty ( ) const
nodiscardpure virtual

◆ environment()

virtual so_5::environment_t & so_5::abstract_message_box_t::environment ( ) const
nodiscardvirtualnoexcept

SObjectizer Environment for which the mbox is created.

Since
v.5.6.0

Implements so_5::abstract_message_box_t.

Reimplemented in so_5::mchain_props::mchain_template< Queue, Tracing_Base >.

◆ extract() [1/2]

virtual mchain_props::extraction_status_t so_5::abstract_message_chain_t::extract ( mchain_props::demand_t & dest,
mchain_props::duration_t empty_queue_timeout )
nodiscardpure virtual
Parameters
destDestination for extracted messages.
empty_queue_timeoutMax time to wait on empty queue.

Implemented in so_5::mchain_props::mchain_template< Queue, Tracing_Base >.

◆ extract() [2/2]

virtual mchain_props::extraction_status_t so_5::abstract_message_chain_t::extract ( mchain_props::demand_t & dest,
mchain_props::select_case_t & select_case )
nodiscardprotectedpure virtual

An extraction attempt as a part of multi chain select.

Attention
This method is a pure virtual since v.5.6.2.
Note
This method is intended to be used by select_case_t.
Since
v.5.5.16
Parameters
destDestination for extracted messages.
select_caseSelect case to be stored for notification if mchain is empty.

Implemented in so_5::mchain_props::mchain_template< Queue, Tracing_Base >.

◆ id()

virtual mbox_id_t so_5::abstract_message_box_t::id ( ) const
nodiscardvirtual

Unique ID of this mbox.

Since
v.5.4.0

Implements so_5::abstract_message_box_t.

Reimplemented in so_5::mchain_props::mchain_template< Queue, Tracing_Base >.

◆ operator=()

abstract_message_chain_t & so_5::abstract_message_chain_t::operator= ( const abstract_message_chain_t & )
privatedelete

◆ push()

virtual mchain_props::push_status_t so_5::abstract_message_chain_t::push ( const std::type_index & msg_type,
const message_ref_t & message,
mchain_props::select_case_t & select_case )
nodiscardprotectedpure virtual

An attempt to push a new message into the mchain.

Unlike do_deliver_message() method the push() doesn't apply the overload reaction if the mchain if full. The select_case is stored to select_cases list instead.

Note
This method is intended to be used by select_case_t.
Since
v.5.7.0
Parameters
msg_typeType of message/signal to be pushed.
messageMessage/signal to be pushed.
select_caseSelect case to be stored for notification if mchain is full.

Implemented in so_5::mchain_props::mchain_template< Queue, Tracing_Base >.

◆ remove_from_select()

virtual void so_5::abstract_message_chain_t::remove_from_select ( mchain_props::select_case_t & select_case)
protectedpure virtualnoexcept

Removement of mchain from multi chain select.

Attention
This method is a pure virtual and noexcept since v.5.6.2.
Note
This method is intended to be used by select_case_t.
Since
v.5.5.16
Parameters
select_caseSelect case to be removed from notification queue.

Implemented in so_5::mchain_props::mchain_template< Queue, Tracing_Base >.

◆ size()

virtual std::size_t so_5::abstract_message_chain_t::size ( ) const
nodiscardpure virtual

Count of messages in the chain.

Implemented in so_5::mchain_props::mchain_template< Queue, Tracing_Base >.

Friends And Related Symbol Documentation

◆ intrusive_ptr_t< abstract_message_chain_t >

friend class intrusive_ptr_t< abstract_message_chain_t >
friend

Definition at line 356 of file mchain.hpp.

◆ mchain_props::select_case_t

friend class mchain_props::select_case_t
friend

Definition at line 461 of file mchain.hpp.


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