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

A multi-producer/single-consumer mbox definition. More...

#include <mpsc_mbox.hpp>

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

Public Member Functions

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

Protected Member Functions

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

Protected Attributes

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

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

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

A multi-producer/single-consumer mbox definition.

Since
v.5.4.0
Note
Since v.5.5.4 is used for implementation of direct mboxes without controling message limits.
Renamed from limitless_mpsc_mbox_t to limitless_mpsc_mbox_template in v.5.5.9.

Constructor & Destructor Documentation

◆ limitless_mpsc_mbox_template()

template<typename Tracing_Base >
template<typename... Tracing_Args>
so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::limitless_mpsc_mbox_template ( mbox_id_t  id,
agent_t single_consumer,
Tracing_Args &&...  tracing_args 
)
inline

Member Function Documentation

◆ do_deliver_enveloped_msg()

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

Reimplemented in so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >.

◆ do_deliver_message()

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

Implements so_5::abstract_message_box_t.

Reimplemented in so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >.

◆ do_deliver_service_request()

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

Implements so_5::abstract_message_box_t.

Reimplemented in so_5::impl::limitful_mpsc_mbox_template< Tracing_Base >.

◆ do_delivery()

template<typename Tracing_Base >
template<typename L >
void so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::do_delivery ( typename Tracing_Base::deliver_op_tracer const &  tracer,
l 
) const
inlineprotected

Helper method to do delivery actions under locked object.

Since
v.5.5.9
Template Parameters
Llambda with actual delivery actions.
Parameters
tracerTracer object to log the case of abscense of subscriptions.
lLambda with actual delivery actions.

◆ drop_delivery_filter()

template<typename Tracing_Base >
virtual void so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::drop_delivery_filter ( const std::type_index &  msg_type,
agent_t subscriber 
)
inlineoverridevirtual

Removes delivery filter for message type and subscriber.

Since
v.5.5.5

Implements so_5::abstract_message_box_t.

◆ id()

template<typename Tracing_Base >
virtual mbox_id_t so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::id ( ) const
inlineoverridevirtual

Unique ID of this mbox.

Since
v.5.4.0

Implements so_5::abstract_message_box_t.

◆ query_name()

template<typename Tracing_Base >
virtual std::string so_5::impl::limitless_mpsc_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 >
virtual void so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::set_delivery_filter ( const std::type_index &  ,
const delivery_filter_t ,
agent_t  
)
inlineoverridevirtual
Attention
Will throw an exception because delivery filter is not applicable to MPSC-mboxes.

Implements so_5::abstract_message_box_t.

◆ subscribe_event_handler()

template<typename Tracing_Base >
virtual void so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::subscribe_event_handler ( const std::type_index &  type_index,
const 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 >
virtual mbox_type_t so_5::impl::limitless_mpsc_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 >
virtual void so_5::impl::limitless_mpsc_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.

Member Data Documentation

◆ m_id

template<typename Tracing_Base >
const mbox_id_t so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::m_id
protected

ID of this mbox.

◆ m_lock

template<typename Tracing_Base >
default_rw_spinlock_t so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::m_lock
mutableprotected

Protection of object from modification.

Since
v.5.5.9

◆ m_single_consumer

template<typename Tracing_Base >
agent_t* so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::m_single_consumer
protected

The only consumer of this mbox's messages.

◆ m_subscriptions_count

template<typename Tracing_Base >
std::size_t so_5::impl::limitless_mpsc_mbox_template< Tracing_Base >::m_subscriptions_count = 0
protected

Number of active subscriptions.

Since
v.5.5.9
Note
If zero then all attempts to deliver message or service request will be ignored.

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