13#include "comms/details/detect.h"
24using ProcessMsgDecayType =
typename std::decay<T>::type;
26template <
bool TIsMessage,
bool TIsMsgPtr>
27struct ProcessMsgIdRetrieveHelper
34struct ProcessMsgIdRetrieveHelper<true, false>
41struct ProcessMsgIdRetrieveHelper<false, true>
45 using ElementType =
typename T::element_type;
49 typename ProcessMsgIdRetrieveHelper<comms::isMessage<ElementType<T> >(), hasElementType<ElementType<T> >()>::
50 template Type<ElementType<T> >;
54using ProcessMsgIdType =
55 typename ProcessMsgIdRetrieveHelper<comms::isMessage<ProcessMsgDecayType<T> >(), hasElementType<ProcessMsgDecayType<T> >()>::
56 template Type<ProcessMsgDecayType<T> >;
58template <
bool TIsMessage,
bool TIsMsgPtr>
59struct ProcessMsgCastToMsgObjHelper;
62struct ProcessMsgCastToMsgObjHelper<true, false>
65 static auto cast(T& msg) ->
decltype(msg)
72struct ProcessMsgCastToMsgObjHelper<false, true>
75 static auto cast(T& msg) ->
decltype(*msg)
82using ProcessMsgCastParamIsMessage =
83 std::integral_constant<
85 isMessage<ProcessMsgDecayType<T> >()
89using ProcessMsgCastParamIsMsgPtr =
90 std::integral_constant<
92 hasElementType<ProcessMsgDecayType<T> >()
96auto processMsgCastToMsgObj(T& msg) ->
97 decltype(ProcessMsgCastToMsgObjHelper<ProcessMsgCastParamIsMessage<T>::value, ProcessMsgCastParamIsMsgPtr<T>::value>::cast(msg))
99 return ProcessMsgCastToMsgObjHelper<ProcessMsgCastParamIsMessage<T>::value, ProcessMsgCastParamIsMsgPtr<T>::value>::cast(msg);
Contains definition of Message object interface and various base classes for custom messages.
Main namespace for all classes / functions of COMMS library.
typename comms::util::LazyDeepConditional< TMsg::InterfaceOptions::HasMsgIdType >::template Type< comms::details::MessageIdTypeRetriever, comms::util::AliasType, TDefaultType, TMsg > MessageIdType
Get type of message ID used by interface class.
Definition Message.h:564