Skip to content
Snippets Groups Projects
Commit 97ac7a6b authored by Jan Trávníček's avatar Jan Trávníček
Browse files

decouple normalize registration from algo registration

parent 85db380d
No related branches found
No related tags found
No related merge requests found
......@@ -8,6 +8,8 @@
#include <abstraction/NormalizeRegistry.hpp>
#include <abstraction/DowncastRegistry.hpp>
 
#include <registration/NormalizationRegistration.hpp>
namespace registration {
 
template < class Algorithm, class RealReturnType, class ... RealParameterTypeBases >
......@@ -22,14 +24,6 @@ public:
}
};
 
template < class Type, typename enable = void >
struct RequireNormalization : std::false_type {
};
template < class Type >
struct RequireNormalization < Type, typename std::enable_if < ext::has_normalize < Type >::value && ! std::is_same < Type, typename Type::normalized_type >::value >::type > : public std::true_type {
};
template < class Type, typename enable = void >
struct RequireDowncast : std::false_type {
};
......@@ -40,24 +34,13 @@ struct RequireDowncast < Type *, typename std::enable_if < ! std::is_final < Typ
 
template < class Algorithm, class ReturnType, class ... ParameterTypes >
class AbstractRegister {
template < class Type, typename std::enable_if < RequireNormalization < Type >::value >::type * = nullptr >
void registerNormalize ( ) {
abstraction::NormalizeRegistry::registerNormalize < ReturnType > ( );
}
template < class Type, typename std::enable_if < ! RequireNormalization < Type >::value >::type * = nullptr >
void registerNormalize ( ) {
}
public:
AbstractRegister ( ReturnType ( * callback ) ( ParameterTypes ... ) ) {
bool normalize = RequireNormalization < ReturnType >::value;
bool normalize = registration::NormalizationRegister < ReturnType > ( ).requireNormalization ( );
bool downcast = RequireDowncast < ReturnType >::value;
 
abstraction::AlgorithmRegistry::registerAlgorithm < Algorithm, ReturnType, ParameterTypes ... > ( callback, downcast, normalize );
 
registerNormalize < ReturnType > ( );
}
};
 
......
#ifndef _NORMALIZATION_REGISTRATION_HPP_
#define _NORMALIZATION_REGISTRATION_HPP_
#include <abstraction/NormalizeRegistry.hpp>
namespace registration {
template < class ReturnType, typename enable = void >
class NormalizationRegister {
public:
NormalizationRegister ( ) {
}
bool requireNormalization ( ) const {
return false;
}
};
template < class ReturnType >
class NormalizationRegister < ReturnType, typename std::enable_if < ext::has_normalize < ReturnType >::value && ! std::is_same < ReturnType, typename ReturnType::normalized_type >::value >::type > {
public:
NormalizationRegister ( ) {
abstraction::NormalizeRegistry::registerNormalize < ReturnType > ( );
}
bool requireNormalization ( ) const {
return true;
}
};
} /* namespace registration */
#endif // _NORMALIZATION_REGISTRATION_HPP_
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment