10#include "comms/details/detect.h"
21template <
typename T,
bool THasImpl>
22struct FrameLayerHasFieldsImplHelper;
25struct FrameLayerHasFieldsImplHelper<T, true>
27 static const bool Value = T::hasFields();
31struct FrameLayerHasFieldsImplHelper<T, false>
33 static const bool Value =
false;
37struct FrameLayerHasFieldsImpl
39 static const bool Value =
40 FrameLayerHasFieldsImplHelper<T, comms::details::hasImplOptions<T>()>::Value;
44constexpr bool frameLayerHasFieldsImpl()
46 return FrameLayerHasFieldsImpl<T>::Value;
49template <
typename T,
bool THasImpl>
50struct FrameLayerHasDoGetIdHelper;
53struct FrameLayerHasDoGetIdHelper<T, true>
55 static const bool Value = T::hasStaticMsgId();
59struct FrameLayerHasDoGetIdHelper<T, false>
61 static const bool Value =
false;
65struct FrameLayerHasDoGetId
67 static const bool Value =
68 FrameLayerHasDoGetIdHelper<T, comms::details::hasImplOptions<T>()>::Value;
72constexpr bool frameLayerHasDoGetId()
74 return FrameLayerHasDoGetId<T>::Value;
77template <
class T,
class R =
void>
78struct FrameLayerEnableIfHasMsgPtr {
using Type = R; };
80template <
class T,
class Enable =
void>
81struct FrameLayerMsgPtr
87struct FrameLayerMsgPtr<T, typename FrameLayerEnableIfHasMsgPtr<typename T::MsgPtr>::Type>
89 using Type =
typename T::MsgPtr;
93class MissingSizeRetriever
96 MissingSizeRetriever(std::size_t& val) : m_value(val) {}
98 void setValue(std::size_t val)
104 std::size_t& m_value;
108struct IsMissingSizeRetrieverHelper
110 static const bool Value =
false;
113template <
typename... TParams>
114struct IsMissingSizeRetrieverHelper<MissingSizeRetriever<TParams...> >
116 static const bool Value =
true;
120constexpr bool isMissingSizeRetriever()
122 return IsMissingSizeRetrieverHelper<T>::Value;
125template <
typename TId>
129 MsgIdRetriever(TId& val) : m_value(val) {}
131 template <
typename U>
132 void setValue(U&& val)
134 m_value =
static_cast<TId
>(val);
142struct IsMsgIdRetrieverHelper
144 static const bool Value =
false;
147template <
typename TId>
148struct IsMsgIdRetrieverHelper<MsgIdRetriever<TId> >
150 static const bool Value =
true;
154constexpr bool isMsgIdRetriever()
156 return IsMsgIdRetrieverHelper<T>::Value;
159class MsgIndexRetriever
162 MsgIndexRetriever(std::size_t& val) : m_value(val) {}
164 void setValue(std::size_t val)
170 std::size_t& m_value;
174struct IsMsgIndexRetrieverHelper
176 static const bool Value =
false;
180struct IsMsgIndexRetrieverHelper<MsgIndexRetriever>
182 static const bool Value =
true;
186constexpr bool isMsgIndexRetriever()
188 return IsMsgIndexRetrieverHelper<T>::Value;
191template <
typename... TRetrievers>
192struct MsgIndexRetrieverDetector;
194template <
typename T,
typename... TRetrievers>
195struct MsgIndexRetrieverDetector<T, TRetrievers...>
197 static const bool Detected = isMsgIndexRetriever<typename std::decay<T>::type>() || MsgIndexRetrieverDetector<TRetrievers...>::Detected;
200template <
typename... TRetrievers>
201constexpr bool hasMsgIndexRetriever()
203 return MsgIndexRetrieverDetector<TRetrievers...>::Detected;
207struct MsgIndexRetrieverDetector<>
209 static const bool Detected =
false;
212template <
typename TIter>
213class MsgPayloadRetriever
216 MsgPayloadRetriever(TIter& iter, std::size_t& len) : m_iter(iter), m_len(len) {}
218 template <
typename TOtherIter>
219 void setValue(TOtherIter iter, std::size_t len)
221 m_iter =
static_cast<TIter
>(iter);
230template <
typename TITer>
231struct IsMsgPayloadRetrieverHelper
233 static const bool Value =
false;
236template <
typename TIter>
237struct IsMsgPayloadRetrieverHelper<MsgPayloadRetriever<TIter> >
239 static const bool Value =
true;
243constexpr bool isMsgPayloadRetriever()
245 return IsMsgPayloadRetrieverHelper<T>::Value;
Main namespace for all classes / functions of COMMS library.