11#include "comms/details/detect.h"
12#include "comms/details/tag.h"
25class WriteIteratorHelper
27 template <
typename... TParams>
28 using HasWriteIterTag = comms::details::tag::Tag1<>;
30 template <
typename... TParams>
31 using MsgPointerTag = comms::details::tag::Tag2<>;
33 template <
typename... TParams>
34 using CastTag = comms::details::tag::Tag3<>;
36 template <
typename TMsg>
38 typename comms::util::LazyShallowConditional<
45 template <
typename TMsg>
46 using MsgPtrOrCastTag =
47 typename comms::util::LazyShallowConditional<
48 hasElementType<TMsg>()
54 template <
typename TMsg>
56 typename comms::util::LazyShallowConditional<
57 comms::isMessage<TMsg>()
64 template <
typename TMsg,
typename TIter,
typename... TParams>
65 static auto getInternal(TIter&& iter, HasWriteIterTag<TParams...>) ->
typename TMsg::WriteIterator
67 static_assert(std::is_convertible<
typename std::decay<
decltype(iter)>::type,
typename TMsg::WriteIterator>::value,
68 "Provided iterator is not convertible to read iterator type used by message interface");
69 return typename TMsg::WriteIterator(std::forward<TIter>(iter));
72 template <
typename TMsg,
typename TIter,
typename... TParams>
73 static auto getInternal(TIter&& iter, CastTag<TParams...>) ->
decltype(std::forward<TIter>(iter))
75 return std::forward<TIter>(iter);
78 template <
typename TMsg,
typename TIter,
typename... TParams>
79 static auto getInternal(TIter&& iter, MsgPointerTag<TParams...>) ->
80 decltype(getInternal<typename TMsg::element_type>(std::forward<TIter>(iter), Tag<typename TMsg::element_type>()))
82 return getInternal<typename TMsg::element_type>(std::forward<TIter>(iter), Tag<typename TMsg::element_type>());
86 template <
typename TMsg,
typename TIter>
87 static auto get(TIter&& iter) ->
decltype(getInternal<TMsg>(std::forward<TIter>(iter), Tag<TMsg>()))
89 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.