31#ifndef DW_FRAMEWORK_TYPEBASEDPARAMETERPROVIDER_HPP_
32#define DW_FRAMEWORK_TYPEBASEDPARAMETERPROVIDER_HPP_
36#include <dw/core/container/VectorFixed.hpp>
47class TypeBasedParameterProvider;
93 dw::core::StringView
const& key,
94 const std::type_info& semanticTypeInfo,
95 const std::type_info& dataTypeInfo,
96 void* out)
const override;
101 dw::core::StringView
const& key,
103 const std::type_info& semanticTypeInfo,
104 const std::type_info& dataTypeInfo,
105 void* out)
const override;
110 template <
typename T>
117 template <
typename T>
134 dw::core::VectorFixed<std::pair<const std::type_info&, const ParameterProvider*>, 256> m_providers;
141 template <
typename T>
148 template <
typename T>
165 dw::core::VectorFixed<std::pair<const std::type_info&, const ITypeBasedParameterProviderChild&>, 256> m_providerChildren;
175 template <
typename T>
178 registerByNameHandler<T, T>(std::move(handler));
182 template <
typename T,
typename S>
199 dw::core::VectorFixed<std::pair<std::pair<const std::type_info&, const std::type_info&>,
ParameterByNameHandler>, 256> m_byNameHandlers;
209 template <
typename T>
212 registerByNameAndIndexHandler<T, T>(std::move(handler));
216 template <
typename T,
typename S>
233 dw::core::VectorFixed<std::pair<std::pair<const std::type_info&, const std::type_info&>,
ParameterByNameAndIndexHandler>, 256> m_byNameAndIndexHandlers;
243 template <
typename T>
246 registerByIndexHandler<T, T>(std::move(handler));
250 template <
typename T,
typename S>
267 dw::core::VectorFixed<std::pair<std::pair<const std::type_info&, const std::type_info&>,
ParameterByIndexHandler>, 256> m_byIndexHandlers;
277 template <
typename T>
280 registerByTypeHandler<T, T>(std::move(handler));
284 template <
typename T,
typename S>
301 dw::core::VectorFixed<std::pair<std::pair<const std::type_info&, const std::type_info&>,
ParameterByTypeHandler>, 256> m_byTypeHandlers;
311 static bool isPairEqual(
const std::pair<const std::type_info&, const std::type_info&>& lhs,
const std::pair<const std::type_info&, const std::type_info&>& rhs);
The additional interface a ParameterProvider can implement so it can be registered at a TypeBasedPara...
ITypeBasedParameterProviderChild & operator=(ITypeBasedParameterProviderChild &&) &=default
Move assignment operator.
ITypeBasedParameterProviderChild & operator=(ITypeBasedParameterProviderChild const &) &=default
Copy assignment operator.
ITypeBasedParameterProviderChild(ITypeBasedParameterProviderChild &&)=default
Move constructor.
virtual ~ITypeBasedParameterProviderChild()=default
Destructor.
virtual void registerAt(TypeBasedParameterProvider &provider) const =0
Register handlers implemented in this parameter provider at the passed type base parameter provider.
ITypeBasedParameterProviderChild()=default
Default constructor.
ITypeBasedParameterProviderChild(ITypeBasedParameterProviderChild const &)=default
Copy constructor.
The interface to access parameter values identified by name and/or (semantic) type.
A parameter provider which dispatches the retrieval of the parameter value to registered handlers whi...
void registerByIndexHandler(const std::type_info &dataTypeInfo, const std::type_info &semanticTypeInfo, ParameterByIndexHandler &&handler)
Register the handler function.
void registerByIndexHandler(ParameterByIndexHandler &&handler)
Register the handler function for the template type T and the semantic template type S.
ParameterByNameAndIndexHandler const * getByNameAndIndexHandler(const std::type_info &dataTypeInfo, const std::type_info &semanticTypeInfo) const
Get the handler function.
void registerByNameAndIndexHandler(ParameterByNameAndIndexHandler &&handler)
Register the handler function for the template type T and the semantic template type S.
const ITypeBasedParameterProviderChild * getProviderChild() const
Get the provider child for the template type T.
std::function< bool(size_t, void *)> ParameterByIndexHandler
bool get(ParameterProvider const *const parentProvider, dw::core::StringView const &key, const std::type_info &semanticTypeInfo, const std::type_info &dataTypeInfo, void *out) const override
ParameterByTypeHandler const * getByTypeHandler(const std::type_info &dataTypeInfo, const std::type_info &semanticTypeInfo) const
Get the handler function.
void registerProviderChild(const std::type_info &typeInfo, const ITypeBasedParameterProviderChild &providerChild)
Register the parameter provider child .
TypeBasedParameterProvider & operator=(TypeBasedParameterProvider const &) &=default
Copy assignment operator.
void registerByTypeHandler(ParameterByTypeHandler &&handler)
Register the handler function for the template type T.
~TypeBasedParameterProvider() override=default
Destructor.
const ITypeBasedParameterProviderChild * getProviderChild(const std::type_info &typeInfo) const
Get the parameter provider child.
static bool isPairEqual(const std::pair< const std::type_info &, const std::type_info & > &lhs, const std::pair< const std::type_info &, const std::type_info & > &rhs)
TypeBasedParameterProvider(TypeBasedParameterProvider const &)=default
Copy constructor.
ParameterByNameHandler const * getByNameHandler(const std::type_info &dataTypeInfo, const std::type_info &semanticTypeInfo) const
Get the handler function.
TypeBasedParameterProvider(TypeBasedParameterProvider &&)=default
Move constructor.
const ParameterProvider * getProvider() const
Get the provider for the template type T.
ParameterByIndexHandler const * getByIndexHandler(const std::type_info &dataTypeInfo, const std::type_info &semanticTypeInfo) const
Get the handler function.
void registerByIndexHandler(ParameterByIndexHandler &&handler)
Register the handler function for the template type T.
std::function< bool(void *)> ParameterByTypeHandler
void registerByNameAndIndexHandler(ParameterByNameAndIndexHandler &&handler)
Register the handler function for the template type T.
TypeBasedParameterProvider & operator=(TypeBasedParameterProvider &&) &=default
Move assignment operator.
void registerByTypeHandler(const std::type_info &dataTypeInfo, const std::type_info &semanticTypeInfo, ParameterByTypeHandler &&handler)
Register the handler function.
void registerByNameHandler(ParameterByNameHandler &&handler)
Register the handler function for the template type T.
void registerProviderChild(const T &providerChild)
std::function< bool(dw::core::StringView const &, size_t, void *)> ParameterByNameAndIndexHandler
void registerByTypeHandler(ParameterByTypeHandler &&handler)
Register the handler function for the template type T and the semantic template type S.
const ParameterProvider * getProvider(const std::type_info &typeInfo) const
Get the parameter provider.
TypeBasedParameterProvider()=default
Default constructor.
void registerByNameHandler(ParameterByNameHandler &&handler)
Register the handler function for the template type T and the semantic template type S.
bool get(ParameterProvider const *const parentProvider, dw::core::StringView const &key, size_t const index, const std::type_info &semanticTypeInfo, const std::type_info &dataTypeInfo, void *out) const override
void registerByNameAndIndexHandler(const std::type_info &dataTypeInfo, const std::type_info &semanticTypeInfo, ParameterByNameAndIndexHandler &&handler)
Register the handler function.
void registerByNameHandler(const std::type_info &dataTypeInfo, const std::type_info &semanticTypeInfo, ParameterByNameHandler &&handler)
Register the handler function.
std::function< bool(dw::core::StringView const &, void *)> ParameterByNameHandler
void registerProvider(const ParameterProvider *provider)
void registerProvider(const std::type_info &typeInfo, const ParameterProvider *provider)
Register the parameter provider.