12#include "comms/details/detect.h"
13#include "comms/details/tag.h"
27class ReadIteratorHelper
29 template <
typename... TParams>
30 using HasReadIterTag = comms::details::tag::Tag1<>;
32 template <
typename... TParams>
33 using MsgPointerTag = comms::details::tag::Tag2<>;
35 template <
typename... TParams>
36 using CastTag = comms::details::tag::Tag3<>;
38 template <
typename TMsg>
40 typename comms::util::LazyShallowConditional<
47 template <
typename TMsg>
48 using MsgPtrOrCastTag =
49 typename comms::util::LazyShallowConditional<
50 hasElementType<TMsg>()
56 template <
typename TMsg>
58 typename comms::util::LazyShallowConditional<
59 comms::isMessage<TMsg>()
66 template <
typename TMsg,
typename TIter,
typename... TParams>
67 static auto getInternal(TIter&& iter, HasReadIterTag<TParams...>) ->
typename TMsg::ReadIterator
69 static_assert(std::is_convertible<
typename std::decay<
decltype(iter)>::type,
typename TMsg::ReadIterator>::value,
70 "Provided iterator is not convertible to read iterator type used by message interface");
71 return typename TMsg::ReadIterator(std::forward<TIter>(iter));
74 template <
typename TMsg,
typename TIter,
typename... TParams>
75 static auto getInternal(TIter&& iter, CastTag<TParams...>) ->
decltype(std::forward<TIter>(iter))
77 return std::forward<TIter>(iter);
80 template <
typename TMsg,
typename TIter,
typename... TParams>
81 static auto getInternal(TIter&& iter, MsgPointerTag<TParams...>) ->
82 decltype(getInternal<typename TMsg::element_type>(std::forward<TIter>(iter), Tag<typename TMsg::element_type>()))
84 return getInternal<typename TMsg::element_type>(std::forward<TIter>(iter), Tag<typename TMsg::element_type>());
88 template <
typename TMsg,
typename TIter>
89 static auto get(TIter&& iter) ->
decltype(getInternal<TMsg>(std::forward<TIter>(iter), Tag<TMsg>()))
91 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.