8#include <ext/registration>
18 template <
size_t ParameterTypesNumber,
class ... ParamNames >
19 static std::array < std::string, ParameterTypesNumber >
generateNames ( ParamNames ... paramNames ) {
20 if constexpr (
sizeof ... ( ParamNames ) > ParameterTypesNumber ) {
21 static_assert (
"Too many parameter names" );
22 }
else if constexpr ( ParameterTypesNumber == 0 ) {
23 return std::array < std::string, ParameterTypesNumber > {};
25 std::array < std::string, ParameterTypesNumber > parameterNames = { { paramNames ... } };
26 for (
size_t i =
sizeof ... ( ParamNames );
i < ParameterTypesNumber; ++
i )
29 return parameterNames;
34template <
class Algorithm,
class ReturnType,
class ... ParameterTypes >
41 template <
class ... ParamNames >
43 std::array < std::string,
sizeof ... ( ParameterTypes ) > parameterNames =
AlgoRegisterHelper::generateNames <
sizeof ... ( ParameterTypes ) > ( paramNames ... );
48 } ), m_category ( category ) {
51 template <
class ... ParamNames >
59 return std::move ( *
this );
63template <
class Algorithm,
class ReturnType,
class ... ParameterTypes >
66 template <
class ... ParamNames >
67 explicit WrapperRegister ( std::shared_ptr < abstraction::OperationAbstraction > ( *
callback ) ( ParameterTypes ... ), ParamNames ... paramNames ) :
ext::
Register < void > ( [=] ( ) {
68 std::array < std::string,
sizeof ... ( ParameterTypes ) > parameterNames =
AlgoRegisterHelper::generateNames <
sizeof ... ( ParameterTypes ) > ( paramNames ... );
80 return std::move ( *
this );
84template <
class Algorithm,
class ReturnType,
class ObjectType,
class ... ParameterTypes >
88 std::string m_methodName;
91 template <
class ... ParamNames >
92 explicit MethodRegister ( ReturnType ( ObjectType::*
callback ) ( ParameterTypes ... ), std::string methodName, ParamNames ... paramNames ) :
ext::
Register < void > ( [=] ( ) {
93 std::array < std::string,
sizeof ... ( ParameterTypes ) > parameterNames =
AlgoRegisterHelper::generateNames <
sizeof ... ( ParameterTypes ) > ( paramNames ... );
95 abstraction::AlgorithmRegistry::registerMethod < Algorithm > (
callback, methodName, std::move ( parameterNames ) );
98 } ), m_methodName ( methodName ) {
105 return std::move ( *
this );
110template <
class Algorithm,
class ReturnType,
class ObjectType,
class ... ParameterTypes >
114 std::string m_methodName;
117 template <
class ... ParamNames >
118 explicit MethodRegister ( ReturnType ( ObjectType::*
callback ) ( ParameterTypes ... )
const, std::string methodName, ParamNames ... paramNames ) :
ext::
Register < void > ( [=] ( ) {
119 std::array < std::string,
sizeof ... ( ParameterTypes ) > parameterNames =
AlgoRegisterHelper::generateNames <
sizeof ... ( ParameterTypes ) > ( paramNames ... );
121 abstraction::AlgorithmRegistry::registerMethod < Algorithm > (
callback, methodName, std::move ( parameterNames ) );
124 } ), m_methodName ( methodName ) {
131 return std::move ( *
this );
AlgorithmCategory
Definition: AlgorithmCategories.hpp:14
static void unregisterWrapper()
Definition: AlgorithmRegistry.hpp:154
static void setDocumentationOfWrapper(const std::string &documentation)
Definition: AlgorithmRegistry.hpp:128
static void setDocumentationOfAlgorithm(AlgorithmCategories::AlgorithmCategory category, const std::string &documentation)
Definition: AlgorithmRegistry.hpp:119
static void unregisterAlgorithm(AlgorithmCategories::AlgorithmCategory category)
Definition: AlgorithmRegistry.hpp:145
static void unregisterMethod(const std::string &methodName)
Definition: AlgorithmRegistry.hpp:137
static void registerWrapper(std::shared_ptr< abstraction::OperationAbstraction >(*callback)(ParamTypes ...), std::array< std::string, sizeof ...(ParamTypes) > paramNames)
Definition: AlgorithmRegistry.hpp:197
static void registerAlgorithm(ReturnType(*callback)(ParamTypes ...), AlgorithmCategories::AlgorithmCategory category, std::array< std::string, sizeof ...(ParamTypes) > paramNames)
Definition: AlgorithmRegistry.hpp:188
static void setDocumentationOfMethod(const std::string &methodName, const std::string &documentation)
Definition: AlgorithmRegistry.hpp:111
Register(InitCallback init, FinalizeCallback finish)
Definition: registration.hpp:64
Definition: registration.hpp:31
Definition: AlgoRegistration.hpp:35
AbstractRegister && setDocumentation(std::string documentation) &&
Definition: AlgoRegistration.hpp:57
AbstractRegister(ReturnType(*callback)(ParameterTypes ...), ParamNames ... paramNames)
Definition: AlgoRegistration.hpp:52
AbstractRegister(AbstractRegister &&) noexcept=default
AbstractRegister(ReturnType(*callback)(ParameterTypes ...), abstraction::AlgorithmCategories::AlgorithmCategory category, ParamNames ... paramNames)
Definition: AlgoRegistration.hpp:42
Definition: AlgoRegistration.hpp:16
static std::array< std::string, ParameterTypesNumber > generateNames(ParamNames ... paramNames)
Definition: AlgoRegistration.hpp:19
MethodRegister(MethodRegister &&) noexcept=default
MethodRegister(ReturnType(ObjectType::*callback)(ParameterTypes ...) const, std::string methodName, ParamNames ... paramNames)
Definition: AlgoRegistration.hpp:118
Definition: AlgoRegistration.hpp:85
MethodRegister(ReturnType(ObjectType::*callback)(ParameterTypes ...), std::string methodName, ParamNames ... paramNames)
Definition: AlgoRegistration.hpp:92
MethodRegister(MethodRegister &&) noexcept=default
MethodRegister && setDocumentation(std::string documentation) &&
Definition: AlgoRegistration.hpp:103
Definition: AlgoRegistration.hpp:64
WrapperRegister && setDocumentation(std::string documentation) &&
Definition: AlgoRegistration.hpp:78
WrapperRegister(WrapperRegister &&) noexcept=default
WrapperRegister(std::shared_ptr< abstraction::OperationAbstraction >(*callback)(ParameterTypes ...), ParamNames ... paramNames)
Definition: AlgoRegistration.hpp:67
Definition: AlgorithmAbstraction.hpp:11
int i
Definition: AllEpsilonClosure.h:118
Definition: sigHandler.cpp:20
int callback(struct dl_phdr_info *info, size_t, void *data)
Definition: simpleStacktrace.cpp:25
std::string to_string(const T &value)
To string method designated for objects that can be casted to string.
Definition: string.hpp:131
Definition: AlgoRegistration.hpp:14
std::conditional_t< core::has_eval< core::normalize< ReturnType > >::value, NormalizationRegisterImpl< ReturnType >, NormalizationRegisterEmpty > NormalizationRegister
Definition: NormalizationRegistration.hpp:39
Definition: FordFulkerson.hpp:16