13#include <ext/typeinfo>
26 explicit Entry (
bool p_isExplicit ) : m_isExplicit ( p_isExplicit ) {
35 template <
class Return,
class Param >
36 class DefaultEntryImpl :
public Entry {
38 explicit DefaultEntryImpl (
bool isExplicit ) : Entry ( isExplicit ) {
41 std::shared_ptr < abstraction::OperationAbstraction >
getAbstraction ( )
const override;
44 template <
class Return,
class Param >
45 class AlgorithmEntryImpl :
public Entry {
46 std::function < Return ( Param ) > m_callback;
49 explicit AlgorithmEntryImpl ( std::function < Return ( Param ) >
callback,
bool isExplicit ) :
Entry ( isExplicit ), m_callback (
std::move (
callback ) ) {
52 std::shared_ptr < abstraction::OperationAbstraction >
getAbstraction ( )
const override;
58 static void unregisterCast (
const std::string & target,
const std::string & param );
60 template <
class TargetType,
class ParamType >
62 std::string target = ext::to_string < TargetType > ( );
63 std::string param = ext::to_string < ParamType > ( );
68 static void registerCast ( std::string target, std::string param, std::unique_ptr < Entry > entry );
70 template <
class TargetType,
class ParamType >
71 static void registerCast ( std::string target, std::string param,
bool isExplicit =
false ) {
72 registerCast ( std::move ( target ), std::move ( param ), std::unique_ptr < Entry > (
new DefaultEntryImpl < TargetType, ParamType > ( isExplicit ) ) );
75 template <
class TargetType,
class ParamType >
77 std::string target = ext::to_string < TargetType > ( );
78 std::string param = ext::to_string < ParamType > ( );
80 registerCast < TargetType, ParamType > ( std::move ( target ), std::move ( param ), isExplicit );
83 template <
class TargetType,
class ParamType >
85 registerCast ( std::move ( target ), std::move ( param ), std::unique_ptr < Entry > (
new AlgorithmEntryImpl < TargetType, const ParamType & > (
callback, isExplicit ) ) );
88 template <
class TargetType,
class ParamType >
90 std::string target = ext::to_string < TargetType > ( );
91 std::string param = ext::to_string < ParamType > ( );
93 registerCastAlgorithm < TargetType, ParamType > ( std::move ( target ), std::move ( param ),
callback, isExplicit );
96 template <
class TargetType,
class ParamType >
98 registerCast ( std::move ( target ), std::move ( param ), std::unique_ptr < Entry > (
new AlgorithmEntryImpl < TargetType, ParamType > (
callback, isExplicit ) ) );
101 template <
class TargetType,
class ParamType >
103 std::string target = ext::to_string < TargetType > ( );
104 std::string param = ext::to_string < ParamType > ( );
106 registerCastAlgorithm < TargetType, ParamType > ( std::move ( target ), std::move ( param ),
callback, isExplicit );
109 static bool isNoOp (
const std::string & target,
const std::string & param );
111 static bool castAvailable (
const std::string & target,
const std::string & param,
bool implicitOnly );
113 static std::shared_ptr < abstraction::OperationAbstraction >
getAbstraction (
const std::string & target,
const std::string & param );
129template <
class Return,
class Param >
130std::shared_ptr < abstraction::OperationAbstraction > CastRegistry::DefaultEntryImpl < Return, Param >::getAbstraction ( )
const {
131 return std::make_shared < abstraction::CastAbstraction < Return, const Param & > > ( );
134template <
class Return,
class Param >
135std::shared_ptr < abstraction::OperationAbstraction > CastRegistry::AlgorithmEntryImpl < Return, Param >::getAbstraction ( )
const {
136 return std::make_shared < abstraction::AlgorithmAbstraction < Return, const Param & > > ( m_callback );
Definition: BaseRegistryEntry.hpp:12
Definition: CastRegistry.hpp:22
bool isExplicit() const
Definition: CastRegistry.hpp:29
Entry(bool p_isExplicit)
Definition: CastRegistry.hpp:26
Definition: CastRegistry.hpp:20
static ext::list< ext::tuple< std::string, std::string, bool > > list()
Definition: CastRegistry.cpp:76
static void registerCastAlgorithm(TargetType(*callback)(ParamType), bool isExplicit=false)
Definition: CastRegistry.hpp:102
static void registerCast(bool isExplicit=false)
Definition: CastRegistry.hpp:76
static void registerCastAlgorithm(TargetType(*callback)(const ParamType &), bool isExplicit=false)
Definition: CastRegistry.hpp:89
static void registerCastAlgorithm(std::string target, std::string param, TargetType(*callback)(ParamType), bool isExplicit=false)
Definition: CastRegistry.hpp:97
static void registerCast(std::string target, std::string param, bool isExplicit=false)
Definition: CastRegistry.hpp:71
static ext::list< ext::pair< std::string, bool > > listTo(const std::string &type)
Definition: CastRegistry.cpp:66
static void unregisterCast()
Definition: CastRegistry.hpp:61
static bool isNoOp(const std::string &target, const std::string ¶m)
Definition: CastRegistry.cpp:45
static void registerCastAlgorithm(std::string target, std::string param, TargetType(*callback)(const ParamType &), bool isExplicit=false)
Definition: CastRegistry.hpp:84
static void registerCast(std::string target, std::string param, std::unique_ptr< Entry > entry)
Definition: CastRegistry.cpp:23
static std::shared_ptr< abstraction::OperationAbstraction > getAbstraction(const std::string &target, const std::string ¶m)
Definition: CastRegistry.cpp:29
static ext::list< ext::pair< std::string, bool > > listFrom(const std::string &type)
Definition: CastRegistry.cpp:56
static bool castAvailable(const std::string &target, const std::string ¶m, bool implicitOnly)
Definition: CastRegistry.cpp:49
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
Definition: AlgorithmAbstraction.hpp:11
int callback(struct dl_phdr_info *info, size_t, void *data)
Definition: simpleStacktrace.cpp:25
Definition: FordFulkerson.hpp:16