12#include "comms/details/MessageInterfaceOptionsParser.h"
20template <
typename... TOptions>
21class MessageInterfaceBuilder
23 using ParsedOptions = MessageInterfaceOptionsParser<TOptions...>;
25 static_assert((!ParsedOptions::HasVersionInExtraTransportFields) || ParsedOptions::HasExtraTransportFields,
26 "comms::option::def::VersionInExtraTransportFields option should not be used "
27 "without comms::option::def::ExtraTransportFields.");
29 static constexpr bool MustHaveVirtualDestructor =
30 (!ParsedOptions::HasNoVirtualDestructor) &&
32 ParsedOptions::HasReadIterator ||
33 ParsedOptions::HasWriteIterator ||
34 ParsedOptions::HasMsgIdInfo ||
35 ParsedOptions::HasHandler ||
36 ParsedOptions::HasValid ||
37 ParsedOptions::HasLength ||
38 ParsedOptions::HasRefresh ||
39 ParsedOptions::HasName
42 using EndianBase =
typename ParsedOptions::template BuildEndian<>;
45 typename ParsedOptions::template BuildMsgIdType<EndianBase>;
47 using TransportFieldsBase =
48 typename ParsedOptions::template BuildExtraTransportFields<IdTypeBase>;
50 using VersionInTransportFieldsBase =
51 typename ParsedOptions::template BuildVersionInExtraTransportFields<TransportFieldsBase>;
54 typename ParsedOptions::template BuildMsgIdInfo<VersionInTransportFieldsBase>;
57 typename ParsedOptions::template BuildReadBase<IdInfoBase>;
60 typename ParsedOptions::template BuildWriteBase<ReadBase>;
63 typename ParsedOptions::template BuildValid<WriteBase>;
66 typename ParsedOptions::template BuildLength<ValidBase>;
69 typename ParsedOptions::template BuildHandler<LengthBase>;
72 typename ParsedOptions::template BuildRefresh<HandlerBase>;
75 typename ParsedOptions::template BuildName<RefreshBase>;
77 using VirtDestructorBase =
78 typename comms::util::LazyShallowDeepConditional<
79 MustHaveVirtualDestructor
81 MessageInterfaceVirtDestructorBase,
82 comms::util::TypeDeepWrap,
86 using Options = ParsedOptions;
87 using Type = VirtDestructorBase;
90template <
typename... TOptions>
91using MessageInterfaceBuilderT =
92 typename MessageInterfaceBuilder<TOptions...>::Type;
Main namespace for all classes / functions of COMMS library.