10#include "comms/details/detect.h"
11#include "comms/details/tag.h"
24class ReadIteratorHelper
26 template <
typename... TParams>
27 using HasReadIterTag = comms::details::tag::Tag1<>;
29 template <
typename... TParams>
30 using MsgPointerTag = comms::details::tag::Tag2<>;
32 template <
typename... TParams>
33 using CastTag = comms::details::tag::Tag3<>;
35 template <
typename TMsg>
37 typename comms::util::LazyShallowConditional<
44 template <
typename TMsg>
45 using MsgPtrOrCastTag =
46 typename comms::util::LazyShallowConditional<
47 hasElementType<TMsg>()
53 template <
typename TMsg>
55 typename comms::util::LazyShallowConditional<
56 comms::isMessage<TMsg>()
63 template <
typename TMsg,
typename TIter,
typename... TParams>
64 static auto getInternal(TIter&& iter, HasReadIterTag<TParams...>) ->
typename TMsg::ReadIterator
66 static_assert(std::is_convertible<
typename std::decay<
decltype(iter)>::type,
typename TMsg::ReadIterator>::value,
67 "Provided iterator is not convertible to read iterator type used by message interface");
68 return typename TMsg::ReadIterator(std::forward<TIter>(iter));
71 template <
typename TMsg,
typename TIter,
typename... TParams>
72 static auto getInternal(TIter&& iter, CastTag<TParams...>) ->
decltype(std::forward<TIter>(iter))
74 return std::forward<TIter>(iter);
77 template <
typename TMsg,
typename TIter,
typename... TParams>
78 static auto getInternal(TIter&& iter, MsgPointerTag<TParams...>) ->
79 decltype(getInternal<typename TMsg::element_type>(std::forward<TIter>(iter), Tag<typename TMsg::element_type>()))
81 return getInternal<typename TMsg::element_type>(std::forward<TIter>(iter), Tag<typename TMsg::element_type>());
85 template <
typename TMsg,
typename TIter>
86 static auto get(TIter&& iter) ->
decltype(getInternal<TMsg>(std::forward<TIter>(iter), Tag<TMsg>()))
88 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.