10#include <ext/functional>
12#include <ext/typeinfo>
34 std::optional<std::string> m_documentation;
45 return m_documentation;
49 m_documentation = std::move ( doc );
54 template <
class ObjectType,
class Return,
class ... Params >
55 class MemberImpl :
public Entry {
56 std::function < Return (
typename std::remove_reference < ObjectType >::type *, Params ... ) > m_callback;
59 explicit MemberImpl ( std::array < std::string,
sizeof ... ( Params ) > paramNames, std::function < Return (
typename std::remove_reference < ObjectType >::type *, Params ... ) >
callback ) : Entry (
AlgorithmFullInfo::methodEntryInfo < ObjectType, Return, Params ... > (
std::move ( paramNames ) ) ), m_callback (
std::move (
callback ) ) {
62 std::shared_ptr < abstraction::OperationAbstraction >
getAbstraction ( )
const override;
65 template <
class Return,
class ... Params >
66 class EntryImpl :
public Entry {
67 std::function < Return ( Params ... ) > m_callback;
70 explicit EntryImpl (
AlgorithmCategories::AlgorithmCategory category, std::array < std::string,
sizeof ... ( Params ) > paramNames, std::function < Return ( Params ... ) >
callback ) :
Entry ( AlgorithmFullInfo::algorithmEntryInfo < Return, Params ... > ( category,
std::move ( paramNames ) ) ), m_callback (
std::move (
callback ) ) {
73 std::shared_ptr < abstraction::OperationAbstraction >
getAbstraction ( )
const override;
76 template <
class Return,
class ... Params >
77 class WrapperImpl :
public Entry {
78 std::function < std::shared_ptr < abstraction::OperationAbstraction > ( Params ... ) > m_wrapperFinder;
81 explicit WrapperImpl ( std::array < std::string,
sizeof ... ( Params ) > paramNames, std::function < std::shared_ptr < abstraction::OperationAbstraction > ( Params ... ) > wrapperFinder ) :
Entry ( AlgorithmFullInfo::wrapperEntryInfo < Return, Params ... > (
std::move ( paramNames ) ) ), m_wrapperFinder (
std::move ( wrapperFinder ) ) {
84 std::shared_ptr < abstraction::OperationAbstraction >
getAbstraction ( )
const override;
87 class RawImpl :
public Entry {
88 std::function < std::shared_ptr < abstraction::Value > (
const std::vector < std::shared_ptr < abstraction::Value > > & ) > m_rawCallback;
94 std::shared_ptr < abstraction::OperationAbstraction >
getAbstraction ( )
const override;
99 static bool isRegistered (
const std::string & algorithm,
const ext::vector < std::string > & templateParams,
const AlgorithmBaseInfo & entryInfo );
101 static void registerInternal ( std::string algorithm,
ext::vector < std::string > templateParams, std::unique_ptr < Entry > value );
103 static void unregisterInternal (
const std::string & algorithm,
const ext::vector < std::string > & templateParams,
const AlgorithmBaseInfo & entryInfo );
105 static void setDocumentation (
const std::string & algorithm,
const ext::vector < std::string > & templateParams,
const AlgorithmBaseInfo & entryInfo, std::string documentation );
110 template <
class Algo,
class ObjectType,
class ... ParamTypes >
112 std::string algorithm = ext::to_string < Algo > ( ) +
"::" + methodName;
115 setDocumentation ( algorithm, templateParams, AlgorithmBaseInfo::methodEntryInfo < ObjectType &, ParamTypes ... > ( ), documentation );
118 template <
class Algo,
class ... ParamTypes >
120 std::string algorithm = ext::to_string < Algo > ( );
124 setDocumentation ( algorithm, templateParams, AlgorithmBaseInfo::algorithmEntryInfo < ParamTypes ... > ( category ), documentation );
127 template <
class Algo,
class ... ParamTypes >
129 std::string algorithm = ext::to_string < Algo > ( );
133 setDocumentation ( algorithm, templateParams, AlgorithmBaseInfo::wrapperEntryInfo < ParamTypes ... > ( ), documentation );
136 template <
class Algo,
class ObjectType,
class ... ParamTypes >
138 std::string algorithm = ext::to_string < Algo > ( ) +
"::" + methodName;
141 unregisterInternal ( algorithm, templateParams, AlgorithmBaseInfo::methodEntryInfo < ObjectType &, ParamTypes ... > ( ) );
144 template <
class Algo,
class ... ParamTypes >
146 std::string algorithm = ext::to_string < Algo > ( );
150 unregisterInternal ( algorithm, templateParams, AlgorithmBaseInfo::algorithmEntryInfo < ParamTypes ... > ( category ) );
153 template <
class Algo,
class ... ParamTypes >
155 std::string algorithm = ext::to_string < Algo > ( );
159 unregisterInternal ( algorithm, templateParams, AlgorithmBaseInfo::wrapperEntryInfo < ParamTypes ... > ( ) );
162 template <
class Algo >
164 std::string algorithm = ext::to_string < Algo > ( );
171 template <
class Algo,
class ObjectType,
class ReturnType,
class ... ParamTypes >
172 static void registerMethod ( ReturnType ( ObjectType:: *
callback ) ( ParamTypes ... ),
const std::string & methodName, std::array < std::string,
sizeof ... ( ParamTypes ) > paramNames ) {
173 std::string algorithm = ext::to_string < Algo > ( ) +
"::" + methodName;
176 registerInternal ( std::move ( algorithm ), std::move ( templateParams ), std::make_unique < MemberImpl < ObjectType &, ReturnType, ParamTypes ... > > ( std::move ( paramNames ),
callback ) );
179 template <
class Algo,
class ObjectType,
class ReturnType,
class ... ParamTypes >
180 static void registerMethod ( ReturnType ( ObjectType:: *
callback ) ( ParamTypes ... )
const,
const std::string & methodName, std::array < std::string,
sizeof ... ( ParamTypes ) > paramNames ) {
181 std::string algorithm = ext::to_string < Algo > ( ) +
"::" + methodName;
184 registerInternal ( std::move ( algorithm ), std::move ( templateParams ), std::make_unique < MemberImpl < const ObjectType &, ReturnType, ParamTypes ... > > ( std::move ( paramNames ),
callback ) );
187 template <
class Algo,
class ReturnType,
class ... ParamTypes >
189 std::string algorithm = ext::to_string < Algo > ( );
193 registerInternal ( std::move ( algorithm ), std::move ( templateParams ), std::make_unique < EntryImpl < ReturnType, ParamTypes ... > > ( category, std::move ( paramNames ),
callback ) );
196 template <
class Algo,
class ReturnType,
class ... ParamTypes >
197 static void registerWrapper ( std::shared_ptr < abstraction::OperationAbstraction > ( *
callback ) ( ParamTypes ... ), std::array < std::string,
sizeof ... ( ParamTypes ) > paramNames ) {
198 std::string algorithm = ext::to_string < Algo > ( );
202 registerInternal ( std::move ( algorithm ), std::move ( templateParams ), std::make_unique < WrapperImpl < ReturnType, ParamTypes ... > > ( std::move ( paramNames ),
callback ) );
205 template <
class Algo >
207 std::string algorithm = ext::to_string < Algo > ( );
215 registerInternal ( std::move ( algorithm ), std::move ( templateParams ), std::make_unique < RawImpl > ( std::move (
result ), std::move ( paramSpecs ), std::move (
callback ) ) );
235template <
class Object,
class Return,
class ... Params >
236std::shared_ptr < abstraction::OperationAbstraction > AlgorithmRegistry::MemberImpl < Object, Return, Params ... >::getAbstraction ( )
const {
240template <
class Return,
class ... Params >
241std::shared_ptr < abstraction::OperationAbstraction > AlgorithmRegistry::EntryImpl < Return, Params ... >::getAbstraction ( )
const {
245template <
class Return,
class ... Params >
246std::shared_ptr < abstraction::OperationAbstraction > AlgorithmRegistry::WrapperImpl < Return, Params ... >::getAbstraction ( )
const {
Definition: AlgorithmAbstraction.hpp:14
static AlgorithmBaseInfo rawEntryInfo(ext::vector< ext::pair< std::string, abstraction::TypeQualifiers::TypeQualifierSet > > paramSpec)
Definition: AlgorithmRegistryInfo.hpp:73
AlgorithmCategory
Definition: AlgorithmCategories.hpp:14
Definition: AlgorithmRegistryInfo.hpp:89
Definition: AlgorithmRegistry.hpp:31
Entry(AlgorithmFullInfo entryInfo)
Definition: AlgorithmRegistry.hpp:37
void setDocumentation(std::string doc)
Definition: AlgorithmRegistry.hpp:48
const std::optional< std::string > & getDocumentation()
Definition: AlgorithmRegistry.hpp:44
const AlgorithmFullInfo & getEntryInfo() const
Definition: AlgorithmRegistry.hpp:40
Definition: AlgorithmRegistry.hpp:29
static void registerMethod(ReturnType(ObjectType::*callback)(ParamTypes ...), const std::string &methodName, std::array< std::string, sizeof ...(ParamTypes) > paramNames)
Definition: AlgorithmRegistry.hpp:172
static ext::set< ext::pair< std::string, ext::vector< std::string > > > list()
Definition: AlgorithmRegistry.cpp:132
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 registerRaw(std::shared_ptr< abstraction::Value >(*callback)(const std::vector< std::shared_ptr< abstraction::Value > > &), ext::pair< std::string, abstraction::TypeQualifiers::TypeQualifierSet > result, ext::vector< ext::tuple< std::string, abstraction::TypeQualifiers::TypeQualifierSet, std::string > > paramSpecs)
Definition: AlgorithmRegistry.hpp:206
static void unregisterRaw(ext::vector< ext::pair< std::string, abstraction::TypeQualifiers::TypeQualifierSet > > parameterSpecs)
Definition: AlgorithmRegistry.hpp:163
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 registerMethod(ReturnType(ObjectType::*callback)(ParamTypes ...) const, const std::string &methodName, std::array< std::string, sizeof ...(ParamTypes) > paramNames)
Definition: AlgorithmRegistry.hpp:180
static void registerRaw(std::string algorithm, std::function< std::shared_ptr< abstraction::Value >(const std::vector< std::shared_ptr< abstraction::Value > > &) > callback, ext::pair< std::string, abstraction::TypeQualifiers::TypeQualifierSet > result, ext::vector< ext::tuple< std::string, abstraction::TypeQualifiers::TypeQualifierSet, std::string > > paramSpecs)
Definition: AlgorithmRegistry.hpp:211
static void registerAlgorithm(ReturnType(*callback)(ParamTypes ...), AlgorithmCategories::AlgorithmCategory category, std::array< std::string, sizeof ...(ParamTypes) > paramNames)
Definition: AlgorithmRegistry.hpp:188
static ext::list< ext::tuple< AlgorithmFullInfo, std::optional< std::string > > > listOverloads(const std::string &algorithm, const ext::vector< std::string > &templateParams)
Definition: AlgorithmRegistry.cpp:120
static std::shared_ptr< abstraction::OperationAbstraction > getAbstraction(const std::string &name, const ext::vector< std::string > &templateParams, const ext::vector< std::string > ¶mTypes, const ext::vector< abstraction::TypeQualifiers::TypeQualifierSet > &typeQualifiers, AlgorithmCategories::AlgorithmCategory category)
Definition: AlgorithmRegistry.cpp:97
static void setDocumentationOfMethod(const std::string &methodName, const std::string &documentation)
Definition: AlgorithmRegistry.hpp:111
static ext::set< ext::pair< std::string, ext::vector< std::string > > > listGroup(const std::string &group)
Definition: AlgorithmRegistry.cpp:110
Definition: BaseRegistryEntry.hpp:12
Definition: MemberAbstraction.hpp:17
Definition: WrapperAbstraction.hpp:120
Class extending the list class from the standard library. Original reason is to allow printing of the...
Definition: list.hpp:44
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
Class extending the pair class from the standard library. Original reason is to allow printing of the...
Definition: pair.hpp:43
Class extending the tuple class from the standard library. Original reason is to allow printing of th...
Definition: tuple.hpp:42
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
Definition: AlgorithmAbstraction.hpp:11
for(const StateType &state :fsm.getStates()) renamingData.insert(std Rename::RenamedAutomaton< T > result(renamingData.at(fsm.getInitialState()))
Definition: Rename.h:253
ext::vector< std::string > get_template_info(const std::string &str)
Definition: typeinfo.cpp:25
int callback(struct dl_phdr_info *info, size_t, void *data)
Definition: simpleStacktrace.cpp:25
std::string erase_template_info(std::string str)
Definition: typeinfo.cpp:12
Definition: FordFulkerson.hpp:16