11 #include <so_5_extra/error_ranges.hpp> 13 #include <so_5/rt/impl/h/msg_tracing_helpers.hpp> 15 #include <so_5/details/h/sync_helpers.hpp> 17 #include <so_5/rt/h/mbox.hpp> 18 #include <so_5/rt/h/enveloped_msg.hpp> 20 #include <so_5/h/optional.hpp> 22 #if defined(SO_5_VERSION) 23 #if (SO_5_VERSION < SO_5_VERSION_MAKE(5
, 19
, 3
)) 24 #error "SObjectizer v.5.5.19.3 or above is required" 27 #error "SObjectizer v.5.5.19.3 or above is required" 116 typename Collecting_Msg,
121 using collecting_msg_type = Collecting_Msg;
122 using traits_type = Traits;
123 using lock_type = Lock_Type;
130 template<
typename Config_Type >
131 using collecting_msg_t =
typename Config_Type::collecting_msg_type;
133 template<
typename Config_Type >
134 using traits_t =
typename Config_Type::traits_type;
136 template<
typename Config_Type >
137 using lock_t =
typename Config_Type::lock_type;
152 template<
typename Config_Type >
156 const so_5::mbox_t & target )
162 "a target for collecting_mbox must be MPSC mbox in case " 163 "of a mutable messge" );
175 template<
typename Config_Type >
233 template<
typename F >
239 message_ref_t ref{
this->storage()[ index ] };
240 return f(mhood_t< collecting_msg_t<Config_Type> >{ref});
265 template<
typename F >
296 template<
typename F >
328 if( message_t::kind_t::enveloped_msg == message_kind(what) )
331 auto opt_payload_info = ::so_5::enveloped_msg::
332 extract_payload_for_message_transformation( what );
333 if( opt_payload_info )
334 return { opt_payload_info->message() };
339 return { std::move(what) };
351 template<
typename Config_Type >
377 message_ref_t message,
381 std::size_t messages_to_collect )
430 template<
typename Config_Type >
461 template<
typename Config_Type >
514 template<
typename Config_Type >
520 using message_type =
typename std::conditional<
526 using builder_type =
typename std::conditional<
546 template<
typename Config_Type >
547 using messages_collected_t =
typename 564 typename Config_Type,
565 typename Tracing_Base >
570 ,
protected Tracing_Base
579 using tracing_base_type = Tracing_Base;
587 using messages_collected_builder_t =
typename 607 typename Specific_Base_Type_Tuple,
608 std::size_t... Specific_Base_Type_Indexes,
609 typename Tracing_Base_Type_Tuple,
610 std::size_t... Tracing_Base_Type_Indexes >
613 Specific_Base_Type_Tuple && specific_base_type_args,
615 Tracing_Base_Type_Tuple && tracing_base_type_args,
645 typename... Size_Specific_Base_Args,
646 typename... Tracing_Base_Args >
651 std::tuple<Size_Specific_Base_Args...> && size_specific_base_args,
654 std::tuple<Tracing_Base_Args...> && tracing_base_args )
677 "subscribe_event_handler is called for collecting-mbox" );
691 s <<
"<mbox:type=COLLECTINGMBOX:id=" <<
this->
m_id <<
">";
704 const std::type_index & msg_type,
705 const message_ref_t & message,
706 unsigned int overlimit_reaction_deep )
const override 721 const std::type_index & msg_type,
723 unsigned int )
const override 729 "service request can't be performed on collecting-mbox" );
734 const std::type_index & msg_type,
735 const message_ref_t & message,
736 unsigned int overlimit_reaction_deep )
override 743 "collect_enveloped_msg",
757 "set_delivery_filter is called for collecting-mbox" );
786 std::
string(
"an attempt to send message or signal of " 787 "different type. expected type: " )
798 typename Tracing_Base::deliver_op_tracer
const & tracer,
799 const message_ref_t & message )
const 843 template< std::size_t S >
867 constexpr std::size_t
887 constexpr std::size_t
970 size()
const {
return m_messages.size(); }
1188 typename Collecting_Msg,
1216 template<
typename... Args >
Ranges for error codes of each submodules.