SObjectizer  5.7
Public Member Functions | Protected Member Functions | Private Member Functions | Friends | List of all members
so_5::abstract_message_chain_t Class Referenceabstract

An interace 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. More...
 
virtual bool empty () const =0
 Is message chain empty? More...
 
virtual std::size_t size () const =0
 Count of messages in the chain. More...
 
virtual void close (mchain_props::close_mode_t mode)
 Close the chain. More...
 
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. More...
 
virtual mbox_id_t id () const=0
 Unique ID of this mbox. More...
 
virtual so_5::environment_tenvironment () const noexcept=0
 SObjectizer Environment for which the mbox is created. More...
 

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. More...
 
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. More...
 
virtual void remove_from_select (mchain_props::select_case_t &select_case) noexcept=0
 Removement of mchain from multi chain select. More...
 
virtual void actual_close (mchain_props::close_mode_t mode)=0
 Close the chain. 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...
 
 abstract_message_box_t ()=default
 
virtual ~abstract_message_box_t () noexcept=default
 
virtual mbox_id_t id () const =0
 Unique ID of this mbox. More...
 
virtual void subscribe_event_handler (const std::type_index &type_index, const message_limit::control_block_t *limit, agent_t &subscriber)=0
 Add the message handler. More...
 
virtual void unsubscribe_event_handlers (const std::type_index &type_index, agent_t &subscriber)=0
 Remove all message handlers. More...
 
virtual std::string query_name () const =0
 Get the mbox name. More...
 
virtual mbox_type_t type () const =0
 Get the type of message box. More...
 
virtual void do_deliver_message (const std::type_index &msg_type, const message_ref_t &message, unsigned int overlimit_reaction_deep)=0
 Deliver message for all subscribers with respect to message limits. More...
 
virtual so_5::environment_tenvironment () const noexcept=0
 SObjectizer Environment for which the mbox is created. More...
 
bool operator== (const abstract_message_box_t &o) const noexcept
 
bool operator< (const abstract_message_box_t &o) const noexcept
 
virtual void set_delivery_filter (const std::type_index &msg_type, const delivery_filter_t &filter, agent_t &subscriber)=0
 Set a delivery filter for message type and subscriber. More...
 
virtual void drop_delivery_filter (const std::type_index &msg_type, agent_t &subscriber) noexcept=0
 Removes delivery filter for message type and subscriber. 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...
 

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
 

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

An interace of message chain.

Since
v.5.5.13

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 ( )

Cast message chain to message box.

◆ close() [1/2]

void so_5::abstract_message_chain_t::close ( mchain_props::close_mode_t  mode)
virtual

Close the chain.

Note
This version just calls protected actual_close() method.
Deprecated:
This method will be removed in v.5.8.0. The close(exceptions_control, close_mode) has to be used instead.
Parameters
modeWhat to do with chain's content.

◆ close() [2/2]

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(

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(
...
}
Since
v.5.7.3
Parameters
modeWhat to do with chain's content.

◆ empty()

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

◆ environment()

virtual so_5::environment_t& so_5::abstract_message_box_t::environment
noexcept

SObjectizer Environment for which the mbox is created.

Since
v.5.6.0

◆ 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 
)
pure 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 
)
protectedpure 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

Unique ID of this mbox.

Since
v.5.4.0

◆ 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 
)
protectedpure 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
pure virtual

Count of messages in the chain.

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

Friends And Related Function Documentation

◆ intrusive_ptr_t< abstract_message_chain_t >

friend class intrusive_ptr_t< abstract_message_chain_t >
friend

◆ mchain_props::select_case_t

friend class mchain_props::select_case_t
friend

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