11 #include <so_5/h/version.hpp> 13 #if (SO_5_VERSION < SO_5_VERSION_MAKE(5
, 23
, 0
)) 14 #error "SObjectizer v.5.5.23 or above is required" 17 #include <so_5_extra/error_ranges.hpp> 19 #include <so_5/rt/h/enveloped_msg.hpp> 20 #include <so_5/rt/h/send_functions.hpp> 79 class envelope_t
final :
public so_5::enveloped_msg::envelope_t
89 handler_invoker_t & invoker )
const noexcept 95 invoker.invoke( payload_info_t{ m_payload } );
104 switch( message_kind( payload ) )
106 case message_kind_t::signal:
break;
107 case message_kind_t::classical_message:
break;
108 case message_kind_t::user_type_message:
break;
109 case message_kind_t::service_request:
110 SO_5_THROW_EXCEPTION(
111 errors::rc_invalid_payload_kind,
112 "service requests can't be enveloped in " 113 "revocable_msg::details::envelope_t" );
114 case message_kind_t::enveloped_msg:
break;
124 return message_mutability( m_payload );
132 SO_5_THROW_EXCEPTION(
133 so_5::extra::revocable_msg::errors
134 ::rc_mutabilty_of_envelope_cannot_be_changed,
135 "revocable_msg's envelope prohibit changing of " 136 "message mutability" );
147 m_revoked.store(
true, std::memory_order_release );
153 return m_revoked.load( std::memory_order_acquire );
159 handler_invoker_t & invoker )
noexcept override 165 invoker.invoke( payload_info_t{ m_payload } );
225 class delivery_id_t
final 237 so_5::intrusive_ptr_t< details::envelope_t > envelope )
254 delivery_id_t &
operator=(
const delivery_id_t & ) =
delete;
258 delivery_id_t &
operator=( delivery_id_t && )
noexcept =
default;
261 swap( delivery_id_t & a, delivery_id_t & b )
noexcept 263 a.m_envelope.swap( b.m_envelope );
276 m_envelope->revoke();
302 return m_envelope ? m_envelope->has_been_revoked() :
true;
313 template<
typename...
Args >
345 template<
class Message,
bool Is_Signal >
348 template<
typename...
Args >
368 template<
class Message >
385 template<
class Message >
440 template<
typename Message,
typename Target,
typename... Args >
441 SO_5_NODISCARD delivery_id_t
449 return impl::instantiator_and_sender< Message >::send(
450 so_5::send_functions_details::arg_to_mbox(
451 std::forward< Target >( to ) ),
452 std::forward< Args >( args )... );
Ranges for error codes of each submodules.
static SO_5_NODISCARD so_5::extra::revocable_msg::delivery_id_t send(const so_5::mbox_t &to, Args &&... args)