3 #ifndef VISR_COMMUNICATION_PROTOCOL_FACTORY_HPP_INCLUDED 4 #define VISR_COMMUNICATION_PROTOCOL_FACTORY_HPP_INCLUDED 23 class ParameterConfigBase;
72 static std::size_t numberOfProtocols() noexcept;
102 template<
class ConcreteCommunicationProtocol >
113 template<
class ConcreteCommunicationProtocol >
114 static void registerCommunicationProtocol();
120 struct VISR_CORE_LIBRARY_SYMBOL Creator
130 using InputCreateFunction = std::function< std::unique_ptr<CommunicationProtocolBase::Input>() >;
135 using OutputCreateFunction = std::function< std::unique_ptr<CommunicationProtocolBase::Output>() >;
144 explicit Creator( CreateFunction fcn,
145 InputCreateFunction inputCreator,
146 OutputCreateFunction outputCreator,
156 std::unique_ptr<CommunicationProtocolBase::Input> createInput()
const;
157 std::unique_ptr<CommunicationProtocolBase::Output> createOutput()
const;
159 std::string
const & name()
const;
162 CreateFunction mCreateFunction;
163 InputCreateFunction mInputCreateFunction;
164 OutputCreateFunction mOutputCreateFunction;
175 template<
class ConcreteCommunicationProtocolType >
176 class TCreator:
public Creator
179 TCreator(
char const * name)
180 : Creator( &TCreator<ConcreteCommunicationProtocolType>::construct,
181 &TCreator<ConcreteCommunicationProtocolType>::constructInput,
182 &TCreator<ConcreteCommunicationProtocolType>::constructOutput,
187 static std::unique_ptr<CommunicationProtocolBase> construct(
ParameterType const & paramType,
190 return std::unique_ptr<CommunicationProtocolBase>(
new ConcreteCommunicationProtocolType(paramType, config ));
193 static std::unique_ptr<CommunicationProtocolBase::Input> constructInput()
195 return std::unique_ptr<CommunicationProtocolBase::Input>(
new typename ConcreteCommunicationProtocolType::InputBase() );
197 static std::unique_ptr<typename CommunicationProtocolBase::Output> constructOutput()
199 return std::unique_ptr<CommunicationProtocolBase::Output>(
new typename ConcreteCommunicationProtocolType::OutputBase() );
205 using CreatorTable = std::map< KeyType, Creator >;
207 static CreatorTable & creatorTable();
210 template<
class ConcreteCommunicationProtocolType >
216 template<
class ConcreteCommunicationProtocolType >
219 registerCommunicationProtocol<ConcreteCommunicationProtocolType>(
226 #endif // #ifndef VISR_COMMUNICATION_PROTOCOL_FACTORY_HPP_INCLUDED static void registerCommunicationProtocol()
Definition: communication_protocol_factory.hpp:217
Definition: communication_protocol_type.hpp:29
uint64_t ParameterType
Definition: parameter_type.hpp:13
std::uint64_t CommunicationProtocolType
Definition: communication_protocol_type.hpp:14
Definition: options.cpp:10
Definition: parameter_config_base.hpp:22
Definition: communication_protocol_factory.hpp:29