From 8a2030ce5fefad6f358b7399af3ab4f4b25b06a6 Mon Sep 17 00:00:00 2001 From: mat007 Date: Tue, 16 Feb 2010 17:11:11 +0000 Subject: [PATCH] Refactoring git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@123 860be788-9bd5-4423-9f1e-828f051e677b --- src/libraries/turtle/is_functor.hpp | 22 ++++++++++------------ src/libraries/turtle/matcher.hpp | 2 +- src/libraries/turtle/mock.hpp | 2 +- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/libraries/turtle/is_functor.hpp b/src/libraries/turtle/is_functor.hpp index 14d088d..e3b898b 100644 --- a/src/libraries/turtle/is_functor.hpp +++ b/src/libraries/turtle/is_functor.hpp @@ -21,14 +21,12 @@ namespace detail typedef boost::type_traits::yes_type yes_type; typedef boost::type_traits::no_type no_type; -#define MOCK_IS_FUNCTION_HELPER(name, check) \ - template< typename T > yes_type& name##_helper( T*, BOOST_DEDUCED_TYPENAME T::check* = 0 ); \ - template< typename T > no_type& name##_helper( T, ... ); \ - template< typename T > struct name \ - { \ - static T* t; \ - enum { value = sizeof( name##_helper( t ) ) == sizeof( yes_type ) }; \ - }; +#define MOCK_IS_FUNCTION_HELPER(N, M) \ + template< typename T > yes_type& N##_helper( BOOST_DEDUCED_TYPENAME T::M* ); \ + template< typename T > no_type& N##_helper( ... ); \ + template< typename T > struct N \ + : boost::mpl::bool_< sizeof( N##_helper< T >( 0 ) ) == sizeof( yes_type ) > \ + {}; MOCK_IS_FUNCTION_HELPER( has_result_type, result_type ) MOCK_IS_FUNCTION_HELPER( has_sig, BOOST_NESTED_TEMPLATE sig< void > ) @@ -40,10 +38,10 @@ namespace detail struct is_functor { typedef BOOST_DEDUCED_TYPENAME boost::mpl::or_< - BOOST_DEDUCED_TYPENAME boost::function_types::is_callable_builtin< T >::type, - BOOST_DEDUCED_TYPENAME boost::integral_constant< bool, has_result_type< T >::value >::type, - BOOST_DEDUCED_TYPENAME boost::integral_constant< bool, has_result< T >::value >::type, - BOOST_DEDUCED_TYPENAME boost::integral_constant< bool, has_sig< T >::value >::type + boost::function_types::is_callable_builtin< T >, + has_result_type< T >, + has_result< T >, + has_sig< T > >::type type; }; } diff --git a/src/libraries/turtle/matcher.hpp b/src/libraries/turtle/matcher.hpp index ec0762a..be8f40a 100644 --- a/src/libraries/turtle/matcher.hpp +++ b/src/libraries/turtle/matcher.hpp @@ -169,7 +169,7 @@ namespace detail typedef BOOST_DEDUCED_TYPENAME \ boost::mpl::at_c< \ BOOST_DEDUCED_TYPENAME \ - boost::function_types::parameter_types< Signature >::type, \ + boost::function_types::parameter_types< Signature >, \ n \ >::type arg##n##_type; \ typedef detail::check< arg##n##_type > constraint##n##_type; diff --git a/src/libraries/turtle/mock.hpp b/src/libraries/turtle/mock.hpp index 54e4ff6..de2371a 100644 --- a/src/libraries/turtle/mock.hpp +++ b/src/libraries/turtle/mock.hpp @@ -164,7 +164,7 @@ namespace detail typedef BOOST_DEDUCED_TYPENAME boost::mpl::at_c< BOOST_DEDUCED_TYPENAME - boost::function_types::parameter_types< S >::type, + boost::function_types::parameter_types< S >, n - 1 >::type type; };