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