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

A multi-producer/single-consumer mbox with message limit control. More...

#include <mpsc_mbox.hpp>

Inheritance diagram for so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >:
so_5::impl::limitless_mpsc_mbox_template< Tracing_Base > so_5::abstract_message_box_t so_5::atomic_refcounted_t

Public Member Functions

template<typename... Tracing_Args>
 limitful_mpsc_mbox_template (mbox_id_t id, agent_t *single_consumer, const so_5::message_limit::impl::info_storage_t &limits_storage, Tracing_Args &&... tracing_args)
 
virtual void do_deliver_message (const std::type_index &msg_type, const message_ref_t &message, unsigned int overlimit_reaction_deep) const override
 Deliver message for all subscribers with respect to message limits. More...
 
virtual void do_deliver_service_request (const std::type_index &msg_type, const message_ref_t &message, unsigned int overlimit_reaction_deep) const override
 Deliver service request. More...
 
void do_deliver_enveloped_msg (const std::type_index &msg_type, const message_ref_t &message, unsigned int overlimit_reaction_deep) override
 Deliver enveloped message. More...
 
- Public Member Functions inherited from so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >
template<typename... Tracing_Args>
 limitless_mpsc_mbox_template (mbox_id_t id, agent_t *single_consumer, Tracing_Args &&... tracing_args)
 
virtual mbox_id_t id () const override
 Unique ID of this mbox. More...
 
virtual void subscribe_event_handler (const std::type_index &, const message_limit::control_block_t *, agent_t *subscriber) override
 Add the message handler. More...
 
virtual void unsubscribe_event_handlers (const std::type_index &, agent_t *subscriber) override
 Remove all message handlers. More...
 
virtual std::string query_name () const override
 Get the mbox name. More...
 
virtual mbox_type_t type () const override
 Get the type of message box. More...
 
virtual void set_delivery_filter (const std::type_index &, const delivery_filter_t &, agent_t &) override
 
virtual void drop_delivery_filter (const std::type_index &, agent_t &) SO_5_NOEXCEPT override
 Removes delivery filter for message type and subscriber. More...
 
- Public Member Functions inherited from so_5::abstract_message_box_t
 abstract_message_box_t ()=default
 
virtual ~abstract_message_box_t () SO_5_NOEXCEPT=default
 
template<class Message >
void deliver_message (std::type_index subscription_type, const intrusive_ptr_t< Message > &msg_ref) const
 Deliver message. More...
 
template<class Message >
void deliver_message (const intrusive_ptr_t< Message > &msg_ref) const
 Deliver message. More...
 
template<class Message >
void deliver_message (std::type_index subscription_type, std::unique_ptr< Message > msg_unique_ptr, message_mutability_t mutability) const
 Deliver message. More...
 
template<class Message >
void deliver_message (std::unique_ptr< Message > msg_unique_ptr) const
 Deliver message. More...
 
template<class Message >
void deliver_message (Message *msg_raw_ptr) const
 Deliver message. More...
 
template<class Message >
void deliver_signal () const
 Deliver signal. More...
 
template<class Result >
service_invoke_proxy_t< Result > get_one ()
 Create a special proxy for service request invocation. More...
 
service_invoke_proxy_t< void > run_one ()
 Create a special proxy for service request invocation where return type is void. More...
 
void deliver_message (const std::type_index &msg_type, const message_ref_t &message) const
 Deliver message for all subscribers. More...
 
void deliver_service_request (const std::type_index &msg_type, const message_ref_t &message) const
 Deliver service request. More...
 
bool operator== (const abstract_message_box_t &o) const SO_5_NOEXCEPT
 
bool operator< (const abstract_message_box_t &o) const SO_5_NOEXCEPT
 

Private Types

using base_type = limitless_mpsc_mbox_template< Tracing_Base >
 

Private Attributes

const so_5::message_limit::impl::info_storage_tm_limits
 

Additional Inherited Members

- Protected Member Functions inherited from so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >
template<typename L >
void do_delivery (typename Tracing_Base::deliver_op_tracer const &tracer, L l) const
 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 () SO_5_NOEXCEPT
 Default constructor. More...
 
 ~atomic_refcounted_t () SO_5_NOEXCEPT=default
 Destructor. More...
 
void inc_ref_count () SO_5_NOEXCEPT
 Increments reference count. More...
 
unsigned long dec_ref_count () SO_5_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...
 
- Protected Attributes inherited from so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >
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...
 
std::size_t m_subscriptions_count = 0
 Number of active subscriptions. More...
 

Detailed Description

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

A multi-producer/single-consumer mbox with message limit control.

Since
v.5.5.4
Note
Renamed from limitful_mpsc_mbox_t to limitful_mpsc_mbox_template in v.5.5.9.
Attention
Stores a reference to message limits storage. Because of that this reference must remains correct till the end of the mbox's lifetime.

Member Typedef Documentation

◆ base_type

template<typename Tracing_Base >
using so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >::base_type = limitless_mpsc_mbox_template< Tracing_Base >
private

Constructor & Destructor Documentation

◆ limitful_mpsc_mbox_template()

template<typename Tracing_Base >
template<typename... Tracing_Args>
so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >::limitful_mpsc_mbox_template ( mbox_id_t  id,
agent_t single_consumer,
const so_5::message_limit::impl::info_storage_t limits_storage,
Tracing_Args &&...  tracing_args 
)
inline
Parameters
idID of that mbox.
single_consumerThe owner of that mbox.
limits_storageThis reference must remains correct till the end of the mbox's lifetime.
tracing_argsOptional arguments for Tracing_Base.

Member Function Documentation

◆ do_deliver_enveloped_msg()

template<typename Tracing_Base >
void so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >::do_deliver_enveloped_msg ( const std::type_index &  msg_type,
const message_ref_t message,
unsigned int  overlimit_reaction_deep 
)
inlineoverridevirtual

Deliver enveloped message.

Note
To keep source-code compatibility with previous versions this method is not pure virtual. It has an implementation that throws an exception with rc_not_implemented error code. This method will be marked as pure virtual in v.5.6.0
Since
v.5.5.23

Reimplemented from so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >.

◆ do_deliver_message()

template<typename Tracing_Base >
virtual void so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >::do_deliver_message ( const std::type_index &  msg_type,
const message_ref_t message,
unsigned int  overlimit_reaction_deep 
) const
inlineoverridevirtual

Deliver message for all subscribers with respect to message limits.

Since
v.5.5.4
Note
It is obvious that do_deliver_message() must be non-const method. The constness is here now to keep compatibility in 5.5.* versions. The constness will be removed in v.5.6.0.

Reimplemented from so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >.

◆ do_deliver_service_request()

template<typename Tracing_Base >
virtual void so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >::do_deliver_service_request ( const std::type_index &  msg_type,
const message_ref_t message,
unsigned int  overlimit_reaction_deep 
) const
inlineoverridevirtual

Deliver service request.

Since
v.5.5.4
Note
It is obvious that do_deliver_message() must be non-const method. The constness is here now to keep compatibility in 5.5.* versions. The constness will be removed in v.5.6.0.

Reimplemented from so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >.

Member Data Documentation

◆ m_limits

template<typename Tracing_Base >
const so_5::message_limit::impl::info_storage_t& so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >::m_limits
private

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