10#include "comms/details/detect.h"
11#include "comms/details/tag.h"
22class ReadIteratorHelper
24 template <
typename... TParams>
25 using HasReadIterTag = comms::details::tag::Tag1<>;
27 template <
typename... TParams>
28 using MsgPointerTag = comms::details::tag::Tag2<>;
30 template <
typename... TParams>
31 using CastTag = comms::details::tag::Tag3<>;
33 template <
typename TMsg>
35 typename comms::util::LazyShallowConditional<
42 template <
typename TMsg>
43 using MsgPtrOrCastTag =
44 typename comms::util::LazyShallowConditional<
45 hasElementType<TMsg>()
51 template <
typename TMsg>
53 typename comms::util::LazyShallowConditional<
54 comms::isMessage<TMsg>()
61 template <
typename TMsg,
typename TIter,
typename... TParams>
62 static auto getInternal(TIter&& iter, HasReadIterTag<TParams...>) ->
typename TMsg::ReadIterator
64 static_assert(std::is_convertible<
typename std::decay<
decltype(iter)>::type,
typename TMsg::ReadIterator>::value,
65 "Provided iterator is not convertible to read iterator type used by message interface");
66 return typename TMsg::ReadIterator(std::forward<TIter>(iter));
69 template <
typename TMsg,
typename TIter,
typename... TParams>
70 static auto getInternal(TIter&& iter, CastTag<TParams...>) ->
decltype(std::forward<TIter>(iter))
72 return std::forward<TIter>(iter);
75 template <
typename TMsg,
typename TIter,
typename... TParams>
76 static auto getInternal(TIter&& iter, MsgPointerTag<TParams...>) ->
77 decltype(getInternal<typename TMsg::element_type>(std::forward<TIter>(iter), Tag<typename TMsg::element_type>()))
79 return getInternal<typename TMsg::element_type>(std::forward<TIter>(iter), Tag<typename TMsg::element_type>());
83 template <
typename TMsg,
typename TIter>
84 static auto get(TIter&& iter) ->
decltype(getInternal<TMsg>(std::forward<TIter>(iter), Tag<TMsg>()))
86 return getInternal<TMsg>(std::forward<TIter>(iter), Tag<TMsg>());
Contains definition of Message object interface and various base classes for custom messages.
Main namespace for all classes / functions of COMMS library.
Replacement to some types from standard type_traits.