From: g0dil Date: Thu, 8 Oct 2009 09:04:41 +0000 (+0000) Subject: Utils: Add missing documentation X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=96a801acd64d520710b9c899ae23d462c759db38;p=senf.git Utils: Add missing documentation git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1478 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/senf/Utils/type_traits.hh b/senf/Utils/type_traits.hh index 19b2345..f3e5811 100644 --- a/senf/Utils/type_traits.hh +++ b/senf/Utils/type_traits.hh @@ -243,6 +243,15 @@ namespace senf : public boost::remove_cv< typename boost::remove_reference::type > {}; + /** \brief Get arity of function T + + \a T may be any function like type: function, pointer to function or (pointer to) + member-function. + + \code + BOOST_STATIC_ASSERT(( senf::function_arity::value == 1 )); + \endcode + */ template < class T > struct function_arity : public boost::integral_constant< diff --git a/senf/Utils/type_traits.mpp b/senf/Utils/type_traits.mpp index 7681a97..eaf46c7 100644 --- a/senf/Utils/type_traits.mpp +++ b/senf/Utils/type_traits.mpp @@ -47,35 +47,39 @@ #define mpp_OtherArgs_(z,n,d) BOOST_PP_COMMA_IF( BOOST_PP_DEC(n) ) typename traits::mpp_Arg(n) #define mpp_OtherArgs() BOOST_PP_REPEAT_FROM_TO( 1, BOOST_PP_ITERATION(), mpp_OtherArgs_, _ ) +#define mpp_ArgN() BOOST_PP_ITERATION() +#define mpp_CurArg() mpp_Arg(BOOST_PP_ITERATION()) + +#define mpp_TrailTplArgs() BOOST_PP_ENUM_TRAILING_PARAMS( BOOST_PP_ITERATION(), class A ) +#define mpp_Args() BOOST_PP_ENUM_PARAMS( BOOST_PP_ITERATION(), A ) + // //////////////////////////////////////////////////////////////////////// #if BOOST_PP_ITERATION_FLAGS()==1 // ////////////////////////////////////// // //////////////////////////////////////////////////////////////////////// template -struct function_traits_remove_arg +struct function_traits_remove_arg { typedef Traits traits; typedef boost::function_traits type; }; -template < class C, class RV - BOOST_PP_ENUM_TRAILING_PARAMS( BOOST_PP_ITERATION(), class A ) > -struct remove_member_pointer +template < class C, class RV mpp_TrailTplArgs()> +struct remove_member_pointer { - typedef RV type (BOOST_PP_ENUM_PARAMS( BOOST_PP_ITERATION(), A )); + typedef RV type (mpp_Args()); }; -template < class C, class RV - BOOST_PP_ENUM_TRAILING_PARAMS( BOOST_PP_ITERATION(), class A ) > -struct member_class +template < class C, class RV mpp_TrailTplArgs() > +struct member_class { typedef C type; }; template -struct function_traits_arg_type +struct function_traits_arg_type { - typedef typename Traits::mpp_Arg(BOOST_PP_ITERATION()) type; + typedef typename Traits::mpp_CurArg() type; }; // //////////////////////////////////////////////////////////////////////// @@ -83,11 +87,29 @@ struct function_traits_arg_type // //////////////////////////////////////////////////////////////////////// // Undefine local Macros -#undef mpp_OtherArgs_ +#undef mpp_Args +#undef mpp_TrailTplArgs +#undef mpp_CurArg +#undef mpp_ArgN #undef mpp_OtherArgs +#undef mpp_OtherArgs_ #undef mpp_Arg // //////////////////////////////////////////////////////////////////////// +/* + (save-excursion (re-search-backward "^// Undefine local Macros") + (forward-line 1) (delete-region (point) (progn (search-forward + "// ////") (forward-line -1) (point))) (insert "\n") (let ((b (point)) + (e (progn (insert (save-excursion (re-search-backward + "^// Local Macros") (search-forward "#define") (beginning-of-line) + (buffer-substring (point) (progn (search-forward "// ////") + (search-backward "#define") (forward-line 1) (point))))) (point)))) + (reverse-region b e) (shell-command-on-region b e "grep -F '#define'" nil + t) (goto-char b) (while (looking-at "#define") (delete-char 7) (insert + "#undef") (skip-chars-forward " ") (re-search-forward "[^a-zA-Z0-9_]") + (delete-region (1- (point)) (progn (end-of-line) (point))) (forward-line + 1)))) +*/ #endif // ///////////////////////////////////////////////////////////////// // ///////////////////////////mpp.e////////////////////////////////////////