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