From ce8fc1af0f461a3538f0b7cd203325c6357b791e Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 8 Aug 2017 10:17:34 +0200 Subject: [PATCH] move type traits extensions to namespace ext --- alib2common/src/common/createUnique.hpp | 2 +- alib2common/src/core/components.hpp | 8 +++---- alib2common/src/core/multipleDispatch.hpp | 24 +++++++++---------- .../src/registration/AlgoRegistration.hpp | 2 +- alib2std/src/extensions/clone.hpp | 4 ++-- alib2std/src/extensions/type_traits.hpp | 5 ++-- alib2std/src/extensions/utility.hpp | 4 ++-- alib2std/src/extensions/variant.hpp | 14 +++++------ .../test-src/extensions/TypeTraitsTest.cpp | 6 ++--- 9 files changed, 35 insertions(+), 34 deletions(-) diff --git a/alib2common/src/common/createUnique.hpp b/alib2common/src/common/createUnique.hpp index cd6487d66a..7a22f1ed7d 100644 --- a/alib2common/src/common/createUnique.hpp +++ b/alib2common/src/common/createUnique.hpp @@ -24,7 +24,7 @@ namespace common { * @return created symbol */ template < class T, class ... Alphabets > -typename std::enable_if < std::all_same < std::set < T >, Alphabets ... >::value, T >::type createUnique ( const T & base, const Alphabets & ... alphabets ) { +typename std::enable_if < ext::all_same < std::set < T >, Alphabets ... >::value, T >::type createUnique ( const T & base, const Alphabets & ... alphabets ) { T attempt = base; unsigned i = 0; diff --git a/alib2common/src/core/components.hpp b/alib2common/src/core/components.hpp index 80df73fe9a..ad630ff382 100644 --- a/alib2common/src/core/components.hpp +++ b/alib2common/src/core/components.hpp @@ -319,7 +319,7 @@ struct ComponentAux < Derived, DataType, std::tuple < SetTypes ... > > : public * @param SetType alphabet type used to distinguish different sub alphabets * @return sub-component */ - template < class SetType, typename std::enable_if < std::is_in < SetType, SetTypes ... >::value >::type * = nullptr > + template < class SetType, typename std::enable_if < ext::is_in < SetType, SetTypes ... >::value >::type * = nullptr > const Component < Derived, DataType, SetType > & accessComponent ( ) const { return static_cast < const Component < Derived, DataType, SetType > & > ( * this ); } @@ -329,7 +329,7 @@ struct ComponentAux < Derived, DataType, std::tuple < SetTypes ... > > : public * @param SetType alphabet type used to distinguish different sub alphabets * @return sub-component */ - template < class SetType, typename std::enable_if < std::is_in < SetType, SetTypes ... >::value >::type * = nullptr > + template < class SetType, typename std::enable_if < ext::is_in < SetType, SetTypes ... >::value >::type * = nullptr > Component < Derived, DataType, SetType > & accessComponent ( ) { return static_cast < Component < Derived, DataType, SetType > & > ( * this ); } @@ -369,7 +369,7 @@ struct ElementAux < Derived, DataType, std::tuple < ElementTypes ... > > : publi * @param ElementType alphabet type used to distinguish different sub alphabets * @return sub-component */ - template < class ElementType, typename std::enable_if < std::is_in < ElementType, ElementTypes ... >::value >::type * = nullptr > + template < class ElementType, typename std::enable_if < ext::is_in < ElementType, ElementTypes ... >::value >::type * = nullptr > const Element < Derived, DataType, ElementType > & accessElement ( ) const { return static_cast < const Element < Derived, DataType, ElementType > & > ( * this ); } @@ -379,7 +379,7 @@ struct ElementAux < Derived, DataType, std::tuple < ElementTypes ... > > : publi * @param ElementType alphabet type used to distinguish different sub alphabets * @return sub-component */ - template < class ElementType, typename std::enable_if < std::is_in < ElementType, ElementTypes ... >::value >::type * = nullptr > + template < class ElementType, typename std::enable_if < ext::is_in < ElementType, ElementTypes ... >::value >::type * = nullptr > Element < Derived, DataType, ElementType > & accessElement ( ) { return static_cast < Element < Derived, DataType, ElementType > & > ( * this ); } diff --git a/alib2common/src/core/multipleDispatch.hpp b/alib2common/src/core/multipleDispatch.hpp index 4d63a26ec8..9303860a6a 100644 --- a/alib2common/src/core/multipleDispatch.hpp +++ b/alib2common/src/core/multipleDispatch.hpp @@ -29,10 +29,10 @@ template < class Algorithm, class ReturnType, class ... FrontStaticParamTypes, c class MultipleDispatch < Algorithm, ReturnType, std::tuple < FrontStaticParamTypes ... >, std::tuple < DispatchedParameterTypes ... >, std::tuple < BackStaticParamTypes ... > > { public: template < class RealReturnType, class ... RealParameterTypeBases > - using overload = std::function < RealReturnType ( FrontStaticParamTypes ..., typename std::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type && ..., BackStaticParamTypes ... ) >; + using overload = std::function < RealReturnType ( FrontStaticParamTypes ..., typename ext::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type && ..., BackStaticParamTypes ... ) >; template < class RealReturnType, class ... RealParameterTypeBases > - using rawOverload = RealReturnType ( * ) ( FrontStaticParamTypes ..., typename std::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type && ..., BackStaticParamTypes ... ); + using rawOverload = RealReturnType ( * ) ( FrontStaticParamTypes ..., typename ext::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type && ..., BackStaticParamTypes ... ); typedef std::tuple < FrontStaticParamTypes ... > frontParams; typedef std::tuple < DispatchedParameterTypes ... > dispatchedParams; @@ -51,7 +51,7 @@ private: public: ReturnType eval ( FrontStaticParamTypes ... front, DispatchedParameterTypes && ... dispatched, BackStaticParamTypes ... back ) { - return ReturnType ( m_callback ( front ..., std::forward < typename std::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type > ( static_cast < typename std::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type && > ( dispatched ) ) ..., back ... ) ); + return ReturnType ( m_callback ( front ..., std::forward < typename ext::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type > ( static_cast < typename ext::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type && > ( dispatched ) ) ..., back ... ) ); } RegistratorWrapper ( overload < RealReturnType, RealParameterTypeBases ... > callback ) : m_callback ( callback ) { @@ -71,15 +71,15 @@ public: template < class RealReturnType, class ... RealParameterTypeBases > // static void registerOverload ( overload < RealReturnType, RealParameterTypeBases ... > callback ) { causes clang 4.0.0 to crash... // static void registerOverload ( rawOverload < RealReturnType, RealParameterTypeBases ... > callback ) { causes clang 4.0.0 to crash... - static void registerOverload ( RealReturnType ( * callback ) ( FrontStaticParamTypes ..., typename std::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type && ..., BackStaticParamTypes ... ) ) { - auto key = std::make_tuple ( std::type_index ( typeid ( typename std::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type ) ) ... ); + static void registerOverload ( RealReturnType ( * callback ) ( FrontStaticParamTypes ..., typename ext::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type && ..., BackStaticParamTypes ... ) ) { + auto key = std::make_tuple ( std::type_index ( typeid ( typename ext::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type ) ) ... ); std::unique_ptr < RegistratorWrapperBase > value ( new RegistratorWrapper < RealReturnType, RealParameterTypeBases ... > ( callback ) ); bool res = getInstance ( ).registeredFunctions.insert ( std::make_pair ( std::move ( key ), std::move ( value ) ) ).second; if ( ! res ) { std::stringstream ss; - ( void ) std::initializer_list < int > { ( ss << ext::to_string < typename std::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type > ( ), 0 ) ... }; + ( void ) std::initializer_list < int > { ( ss << ext::to_string < typename ext::match_cv_ref < DispatchedParameterTypes, RealParameterTypeBases >::type > ( ), 0 ) ... }; std::string classType = ext::to_string < Algorithm > ( ); @@ -124,10 +124,10 @@ template < class Algorithm, class ReturnType, class ParametersType > class PromotingDoubleDispatch { public: template < class RealReturnType, class RealParametersTypeBase > - using overload = std::function < RealReturnType ( typename std::match_cv_ref < ParametersType, RealParametersTypeBase >::type &&, typename std::match_cv_ref < ParametersType, RealParametersTypeBase >::type && ) >; + using overload = std::function < RealReturnType ( typename ext::match_cv_ref < ParametersType, RealParametersTypeBase >::type &&, typename ext::match_cv_ref < ParametersType, RealParametersTypeBase >::type && ) >; template < class RealReturnType, class RealParametersTypeBase > - using rawOverload = RealReturnType ( * ) ( typename std::match_cv_ref < ParametersType, RealParametersTypeBase >::type &&, typename std::match_cv_ref < ParametersType, RealParametersTypeBase >::type && ); + using rawOverload = RealReturnType ( * ) ( typename ext::match_cv_ref < ParametersType, RealParametersTypeBase >::type &&, typename ext::match_cv_ref < ParametersType, RealParametersTypeBase >::type && ); typedef std::tuple < > frontParams; typedef std::tuple < ParametersType, ParametersType > dispatchedParams; @@ -143,7 +143,7 @@ private: template < class RealReturnType, class RealParametersTypeBase > class RegistratorWrapper : public RegistratorWrapperBase { - typedef typename std::match_cv_ref < ParametersType, RealParametersTypeBase >::type RealParametersType; + typedef typename ext::match_cv_ref < ParametersType, RealParametersTypeBase >::type RealParametersType; std::function < RealReturnType ( RealParametersType &&, RealParametersType && ) > m_callback; @@ -185,12 +185,12 @@ private: public: template < class RealReturnType, class RealParametersTypeBase > - static void registerOverload ( RealReturnType ( * callback ) ( typename std::match_cv_ref < ParametersType, RealParametersTypeBase >::type &&, typename std::match_cv_ref < ParametersType, RealParametersTypeBase >::type && ) ) { + static void registerOverload ( RealReturnType ( * callback ) ( typename ext::match_cv_ref < ParametersType, RealParametersTypeBase >::type &&, typename ext::match_cv_ref < ParametersType, RealParametersTypeBase >::type && ) ) { std::unique_ptr < RegistratorWrapperBase > value ( new RegistratorWrapper < RealReturnType, RealParametersTypeBase > ( callback ) ); - bool res = getInstance ( ).registeredFunctions.insert ( std::make_pair ( std::type_index ( typeid ( typename std::match_cv_ref < ParametersType, RealParametersTypeBase >::type ) ), std::move ( value ) ) ).second; + bool res = getInstance ( ).registeredFunctions.insert ( std::make_pair ( std::type_index ( typeid ( typename ext::match_cv_ref < ParametersType, RealParametersTypeBase >::type ) ), std::move ( value ) ) ).second; if ( ! res ) { - std::string paramsType = ext::to_string < typename std::match_cv_ref < ParametersType, RealParametersTypeBase >::type > ( ); + std::string paramsType = ext::to_string < typename ext::match_cv_ref < ParametersType, RealParametersTypeBase >::type > ( ); std::string classType = ext::to_string < Algorithm > ( ); diff --git a/alib2common/src/registration/AlgoRegistration.hpp b/alib2common/src/registration/AlgoRegistration.hpp index 1a2d5e27fd..eff3c40837 100644 --- a/alib2common/src/registration/AlgoRegistration.hpp +++ b/alib2common/src/registration/AlgoRegistration.hpp @@ -27,7 +27,7 @@ struct RequireNormalization : std::false_type { }; template < class Type > -struct RequireNormalization < Type, typename std::enable_if < std::has_normalize < Type >::value && ! std::is_same < Type, typename Type::normalized_type >::value >::type > : public std::true_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 > diff --git a/alib2std/src/extensions/clone.hpp b/alib2std/src/extensions/clone.hpp index 6b7a106fcf..ac15a1db52 100644 --- a/alib2std/src/extensions/clone.hpp +++ b/alib2std/src/extensions/clone.hpp @@ -12,12 +12,12 @@ namespace ext { -template<class T, typename std::enable_if< ! std::has_clone<T>::value >::type* = nullptr> +template<class T, typename std::enable_if< ! ext::has_clone<T>::value >::type* = nullptr> T* clone(const T * const tmp) { return new T(*tmp); } -template<class T, typename std::enable_if< std::has_clone<T>::value >::type* = nullptr> +template<class T, typename std::enable_if< ext::has_clone<T>::value >::type* = nullptr> T* clone(const T * const tmp) { return tmp->clone(); } diff --git a/alib2std/src/extensions/type_traits.hpp b/alib2std/src/extensions/type_traits.hpp index f8e205e39c..214292277a 100644 --- a/alib2std/src/extensions/type_traits.hpp +++ b/alib2std/src/extensions/type_traits.hpp @@ -10,8 +10,9 @@ #include <type_traits> #include <utility> +#include <cstdlib> -namespace std { +namespace ext { template<class T> struct has_clone { @@ -110,6 +111,6 @@ namespace std { template < typename T, typename ... Ts > struct all_same < T, T, Ts ... > : all_same < T, Ts ... > { }; -} /* namespace std */ +} /* namespace ext */ #endif /* __TYPE_TRAITS_HPP_ */ diff --git a/alib2std/src/extensions/utility.hpp b/alib2std/src/extensions/utility.hpp index fa8b84961d..2389c926fb 100644 --- a/alib2std/src/extensions/utility.hpp +++ b/alib2std/src/extensions/utility.hpp @@ -38,7 +38,7 @@ struct AlignOf<void> { namespace std { -template < class T, typename std::enable_if < ! std::has_clone < T >::value >::type * = nullptr > +template < class T, typename std::enable_if < ! ext::has_clone < T >::value >::type * = nullptr > inline T move_copy ( const T & param ) { return T ( param ); } @@ -92,7 +92,7 @@ inline rvalue_ref < T > manage_move ( T * param ) { return rvalue_ref < T > { param }; } -template < class T, typename std::enable_if < std::has_clone < T >::value >::type * = nullptr > +template < class T, typename std::enable_if < ext::has_clone < T >::value >::type * = nullptr > inline rvalue_ref < T > move_copy ( const T & param ) { return manage_move ( param.clone ( ) ); } diff --git a/alib2std/src/extensions/variant.hpp b/alib2std/src/extensions/variant.hpp index a0e5540643..5ebdcbb603 100644 --- a/alib2std/src/extensions/variant.hpp +++ b/alib2std/src/extensions/variant.hpp @@ -219,7 +219,7 @@ class variant : public variant_base<static_max<SizeOf<Ts>::size...>, static_max< public: using variant_base<static_max<SizeOf<Ts>::size...>, static_max<AlignOf<Ts>::align...>, Ts...>::variant_base; - template < typename = std::enable_if < std::is_in<void, Ts...>::value > > + template < typename = std::enable_if < ext::is_in<void, Ts...>::value > > variant ( ) : variant_base<static_max<SizeOf<Ts>::size...>, static_max<AlignOf<Ts>::align...>, Ts...> ( ) { } @@ -279,32 +279,32 @@ public: return helper_t::compareHelper(this->type_id, &this->data, other.type_id, &other.data); } - template<typename T, typename = std::enable_if < std::is_in<T, Ts...>::value > > + template<typename T, typename = std::enable_if < ext::is_in<T, Ts...>::value > > bool is() const { return (this->type_id == typeid(T).hash_code()); } - template<typename = std::enable_if < std::is_in<void, Ts...>::value > > + template<typename = std::enable_if < ext::is_in<void, Ts...>::value > > void set ( ) { helper_t::destroy(this->type_id, &this->data); this->type_id = typeid(void).hash_code(); } - template<typename T, typename = std::enable_if < std::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > > + template<typename T, typename = std::enable_if < ext::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > > void set(T&& value) { helper_t::destroy(this->type_id, &this->data); new (&this->data) T(value); this->type_id = typeid(T).hash_code(); } - template<typename T, typename = std::enable_if < std::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > > + template<typename T, typename = std::enable_if < ext::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > > void set(const T& value) { helper_t::destroy(this->type_id, &this->data); new (&this->data) T(std::move(value)); this->type_id = typeid(T).hash_code(); } - template<typename T, typename = std::enable_if < std::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > > + template<typename T, typename = std::enable_if < ext::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > > T& get() { // It is a dynamic_cast-like behaviour if (this->type_id == typeid(T).hash_code()) @@ -313,7 +313,7 @@ public: throw std::bad_cast(); } - template<typename T, typename = std::enable_if < std::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > > + template<typename T, typename = std::enable_if < ext::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > > const T& get() const { // It is a dynamic_cast-like behaviour if (this->type_id == typeid(T).hash_code()) diff --git a/alib2std/test-src/extensions/TypeTraitsTest.cpp b/alib2std/test-src/extensions/TypeTraitsTest.cpp index 52c905dcc0..50bd2bc5bf 100644 --- a/alib2std/test-src/extensions/TypeTraitsTest.cpp +++ b/alib2std/test-src/extensions/TypeTraitsTest.cpp @@ -11,10 +11,10 @@ void TypeTraitsTest::tearDown() { } void TypeTraitsTest::testAccessPackElement() { - CPPUNIT_ASSERT( ( std::is_same< std::get_type_pack_element < 0, int, double >::type, int >::value ) == true ); + CPPUNIT_ASSERT( ( std::is_same< ext::get_type_pack_element < 0, int, double >::type, int >::value ) == true ); } void TypeTraitsTest::testTypeInPack() { - CPPUNIT_ASSERT( ( std::is_in< int, double, std::set<int>, float, char, int, std::string >::value ) == true ); - CPPUNIT_ASSERT( ( std::is_in< long, double, std::set<int>, float, char, int, std::string >::value ) == false ); + CPPUNIT_ASSERT( ( ext::is_in< int, double, std::set<int>, float, char, int, std::string >::value ) == true ); + CPPUNIT_ASSERT( ( ext::is_in< long, double, std::set<int>, float, char, int, std::string >::value ) == false ); } -- GitLab