11 #include <so_5_extra/error_ranges.hpp> 13 #include <so_5/impl/msg_tracing_helpers.hpp> 15 #include <so_5/details/sync_helpers.hpp> 17 #include <so_5/mbox.hpp> 18 #include <so_5/enveloped_msg.hpp> 20 #include <so_5/optional.hpp> 99 typename Collecting_Msg,
104 using collecting_msg_type = Collecting_Msg;
105 using traits_type = Traits;
106 using lock_type = Lock_Type;
113 template<
typename Config_Type >
114 using collecting_msg_t =
typename Config_Type::collecting_msg_type;
116 template<
typename Config_Type >
117 using traits_t =
typename Config_Type::traits_type;
119 template<
typename Config_Type >
120 using lock_t =
typename Config_Type::lock_type;
135 template<
typename Config_Type >
139 const so_5::mbox_t & target )
145 "a target for collecting_mbox must be MPSC mbox in case " 146 "of a mutable messge" );
158 template<
typename Config_Type >
216 template<
typename F >
222 message_ref_t ref{
this->storage()[ index ] };
223 return f(mhood_t< collecting_msg_t<Config_Type> >{ref});
248 template<
typename F >
279 template<
typename F >
311 if( message_t::kind_t::enveloped_msg == message_kind(what) )
314 auto opt_payload_info = ::so_5::enveloped_msg::
315 extract_payload_for_message_transformation( what );
316 if( opt_payload_info )
317 return { opt_payload_info->message() };
322 return { std::move(what) };
334 template<
typename Config_Type >
360 message_ref_t message,
364 std::size_t messages_to_collect )
413 template<
typename Config_Type >
444 template<
typename Config_Type >
497 template<
typename Config_Type >
529 template<
typename Config_Type >
530 using messages_collected_t =
typename 547 typename Config_Type,
548 typename Tracing_Base >
553 ,
protected Tracing_Base
562 using tracing_base_type = Tracing_Base;
570 using messages_collected_builder_t =
typename 590 typename Specific_Base_Type_Tuple,
591 std::size_t... Specific_Base_Type_Indexes,
592 typename Tracing_Base_Type_Tuple,
593 std::size_t... Tracing_Base_Type_Indexes >
596 Specific_Base_Type_Tuple && specific_base_type_args,
598 Tracing_Base_Type_Tuple && tracing_base_type_args,
628 typename... Size_Specific_Base_Args,
629 typename... Tracing_Base_Args >
634 std::tuple<Size_Specific_Base_Args...> && size_specific_base_args,
637 std::tuple<Tracing_Base_Args...> && tracing_base_args )
660 "subscribe_event_handler is called for collecting-mbox" );
674 s <<
"<mbox:type=COLLECTINGMBOX:id=" <<
this->
m_id <<
">";
687 const std::type_index & msg_type,
688 const message_ref_t & message,
689 unsigned int overlimit_reaction_deep )
override 710 "set_delivery_filter is called for collecting-mbox" );
741 std::
string(
"an attempt to send message or signal of " 742 "different type. expected type: " )
749 typename Tracing_Base::deliver_op_tracer
const & tracer,
750 const message_ref_t & message )
792 template< std::size_t S >
817 size()
const noexcept {
return S; }
837 size()
const noexcept {
return S; }
897 size()
const noexcept {
return m_size; }
916 storage()
const noexcept {
return m_messages; }
919 size()
const noexcept {
return m_messages.size(); }
1129 typename Collecting_Msg,
1157 template<
typename... Args >
Ranges for error codes of each submodules.