39 lines
1.3 KiB
C++
39 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <sp/MessageInterfaces.h>
|
|
|
|
namespace sp {
|
|
namespace option {
|
|
|
|
class EmptyBase {};
|
|
|
|
template <typename... TOptions>
|
|
struct MessageInterfaceBuilder {
|
|
// Parse the options
|
|
using ParsedOptions = MessageInterfaceParsedOptions<TOptions...>;
|
|
|
|
// Add ID retrieval functionality if ID type was provided
|
|
using Base1 = typename MessageInterfaceProcessMsgId<EmptyBase, ParsedOptions, ParsedOptions::HasMsgIdType>::Type;
|
|
|
|
// Add ReadData() and WriteData(), that use the right endian
|
|
using Base2 = typename MessageInterfaceProcessEndian<Base1, ParsedOptions::HasLittleEndian>::Type;
|
|
|
|
// Add read functionality if Read type was provided
|
|
using Base3 = typename MessageInterfaceProcessRead<Base2, ParsedOptions::HasReadOperations>::Type;
|
|
|
|
// Add write functionality if Write type was provided
|
|
using Base4 = typename MessageInterfaceProcessWrite<Base3, ParsedOptions::HasWriteOperations>::Type;
|
|
|
|
// add dispatch functionality if Handler type was provided
|
|
using Base5 = typename MessageInterfaceProcessHandler<Base4, ParsedOptions, ParsedOptions::HasHandler>::Type;
|
|
|
|
// add valid functionality if Valid tpe was provided
|
|
using Base6 = typename MessageInterfaceProcessValid<Base5, ParsedOptions::HasValid>::Type;
|
|
|
|
// The last Base6 must be taken as final type.
|
|
using Type = Base6;
|
|
};
|
|
|
|
} // namespace option
|
|
} // namespace sp
|