12#include "comms/details/detect.h"
26template <
typename T,
bool THasImpl>
27struct FrameLayerHasFieldsImplHelper;
30struct FrameLayerHasFieldsImplHelper<T, true>
32 static const bool Value = T::hasFields();
36struct FrameLayerHasFieldsImplHelper<T, false>
38 static const bool Value =
false;
42struct FrameLayerHasFieldsImpl
44 static const bool Value =
45 FrameLayerHasFieldsImplHelper<T, comms::details::hasImplOptions<T>()>::Value;
49constexpr bool frameLayerHasFieldsImpl()
51 return FrameLayerHasFieldsImpl<T>::Value;
54template <
typename T,
bool THasImpl>
55struct FrameLayerHasDoGetIdHelper;
58struct FrameLayerHasDoGetIdHelper<T, true>
60 static const bool Value = T::hasDoGetId();
64struct FrameLayerHasDoGetIdHelper<T, false>
66 static const bool Value =
false;
70struct FrameLayerHasDoGetId
72 static const bool Value =
73 FrameLayerHasDoGetIdHelper<T, comms::details::hasImplOptions<T>()>::Value;
77constexpr bool frameLayerHasDoGetId()
79 return FrameLayerHasDoGetId<T>::Value;
82template <
class T,
class R =
void>
83struct FrameLayerEnableIfHasMsgPtr {
using Type = R; };
85template <
class T,
class Enable =
void>
86struct FrameLayerMsgPtr
92struct FrameLayerMsgPtr<T, typename FrameLayerEnableIfHasMsgPtr<typename T::MsgPtr>::Type>
94 using Type =
typename T::MsgPtr;
98class MissingSizeRetriever
101 MissingSizeRetriever(std::size_t& val) : m_value(val) {}
103 void setValue(std::size_t val)
109 std::size_t& m_value;
113struct IsMissingSizeRetrieverHelper
115 static const bool Value =
false;
118template <
typename... TParams>
119struct IsMissingSizeRetrieverHelper<MissingSizeRetriever<TParams...> >
121 static const bool Value =
true;
125constexpr bool isMissingSizeRetriever()
127 return IsMissingSizeRetrieverHelper<T>::Value;
130template <
typename TId>
134 MsgIdRetriever(TId& val) : m_value(val) {}
136 template <
typename U>
137 void setValue(U&& val)
139 m_value =
static_cast<TId
>(val);
147struct IsMsgIdRetrieverHelper
149 static const bool Value =
false;
152template <
typename TId>
153struct IsMsgIdRetrieverHelper<MsgIdRetriever<TId> >
155 static const bool Value =
true;
159constexpr bool isMsgIdRetriever()
161 return IsMsgIdRetrieverHelper<T>::Value;
164class MsgIndexRetriever
167 MsgIndexRetriever(std::size_t& val) : m_value(val) {}
169 void setValue(std::size_t val)
175 std::size_t& m_value;
179struct IsMsgIndexRetrieverHelper
181 static const bool Value =
false;
185struct IsMsgIndexRetrieverHelper<MsgIndexRetriever>
187 static const bool Value =
true;
191constexpr bool isMsgIndexRetriever()
193 return IsMsgIndexRetrieverHelper<T>::Value;
196template <
typename... TRetrievers>
197struct MsgIndexRetrieverDetector;
199template <
typename T,
typename... TRetrievers>
200struct MsgIndexRetrieverDetector<T, TRetrievers...>
202 static const bool Detected = isMsgIndexRetriever<typename std::decay<T>::type>() || MsgIndexRetrieverDetector<TRetrievers...>::Detected;
205template <
typename... TRetrievers>
206constexpr bool hasMsgIndexRetriever()
208 return MsgIndexRetrieverDetector<TRetrievers...>::Detected;
212struct MsgIndexRetrieverDetector<>
214 static const bool Detected =
false;
217template <
typename TIter>
218class MsgPayloadRetriever
221 MsgPayloadRetriever(TIter& iter, std::size_t& len) : m_iter(iter), m_len(len) {}
223 template <
typename TOtherIter>
224 void setValue(TOtherIter iter, std::size_t len)
226 m_iter =
static_cast<TIter
>(iter);
235template <
typename TITer>
236struct IsMsgPayloadRetrieverHelper
238 static const bool Value =
false;
241template <
typename TIter>
242struct IsMsgPayloadRetrieverHelper<MsgPayloadRetriever<TIter> >
244 static const bool Value =
true;
248constexpr bool isMsgPayloadRetriever()
250 return IsMsgPayloadRetrieverHelper<T>::Value;
Main namespace for all classes / functions of COMMS library.