2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-23 05:42:30 +00:00

Start using preprocessor library

[SVN r13436]
This commit is contained in:
Dave Abrahams
2002-04-10 19:33:06 +00:00
parent eab0a73f53
commit 377fbed517
3 changed files with 274 additions and 178 deletions

View File

@@ -7,6 +7,10 @@
# define MEMBER_FUNCTION_CAST_DWA2002311_HPP
# include <boost/mpl/select_type.hpp>
# include <boost/type_traits/composite_traits.hpp>
# include <boost/python/detail/preprocessor.hpp>
# include <boost/mpl/aux_/preprocessor.hpp>
# include <boost/preprocessor/comma_if.hpp>
# include <boost/preprocessor/dec.hpp>
namespace boost { namespace python { namespace detail {
@@ -49,175 +53,26 @@ struct member_function_cast_impl
{
return non_member_function_cast_impl();
}
# endif
template <class S, class R>
static cast_helper<S,R(T::*)()> stage1(R (S::*)())
{
return cast_helper<S,R(T::*)()>();
}
# endif
// Member functions
# ifndef BOOST_PYTHON_GENERATE_CODE
# include <boost/python/preprocessed/member_function_cast.hpp>
# endif
template <class S, class R, class A0>
static cast_helper<S,R(T::*)(A0)> stage1(R (S::*)(A0))
{
return cast_helper<S,R(T::*)(A0)>();
}
# define BOOST_PYTHON_MEMBER_FUNCTION_CAST_STAGE1(args, cv) \
template < \
class S \
, class R \
BOOST_PP_COMMA_IF(BOOST_PP_DEC(args)) BOOST_MPL_TEMPLATE_PARAMETERS(1, args, class A) \
> \
static cast_helper<S,BOOST_PYTHON_FN(T::*,1,args)cv()> \
stage1(BOOST_PYTHON_FN(S::*,1,args)cv()) \
{ \
return cast_helper<S,BOOST_PYTHON_FN(T::*,1,args)cv()>(); \
}
template <class S, class R, class A0, class A1>
static cast_helper<S,R(T::*)(A0,A1) > stage1(R (S::*)(A0,A1))
{
return cast_helper<S,R(T::*)(A0,A1) >();
}
template <class S, class R, class A0, class A1,class A2>
static cast_helper<S,R(T::*)(A0,A1,A2) > stage1(R (S::*)(A0,A1,A2))
{
return cast_helper<S,R(T::*)(A0,A1,A2) >();
}
template <class S, class R, class A0, class A1, class A2, class A3>
static cast_helper<S,R(T::*)(A0,A1,A2,A3)> stage1(R (S::*)(A0,A1,A2,A3))
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3)>();
}
template <class S, class R, class A0, class A1, class A2, class A3, class A4>
static cast_helper<S,R(T::*)(A0,A1,A2,A3,A4)> stage1(R (S::*)(A0,A1,A2,A3,A4))
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3,A4)>();
}
template <class S, class R, class A0, class A1, class A2, class A3, class A4, class A5>
static cast_helper<S,R(T::*)(A0,A1,A2,A3,A4,A5)> stage1(R (S::*)(A0,A1,A2,A3,A4,A5))
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3,A4,A5)>();
}
template <class S, class R>
static cast_helper<S,R(T::*)()const> stage1(R (S::*)()const)
{
return cast_helper<S,R(T::*)()const>();
}
template <class S, class R, class A0>
static cast_helper<S,R(T::*)(A0)const> stage1(R (S::*)(A0)const)
{
return cast_helper<S,R(T::*)(A0)const>();
}
template <class S, class R, class A0, class A1>
static cast_helper<S,R(T::*)(A0,A1)const> stage1(R (S::*)(A0,A1)const)
{
return cast_helper<S,R(T::*)(A0,A1)const>();
}
template <class S, class R, class A0, class A1,class A2>
static cast_helper<S,R(T::*)(A0,A1,A2)const> stage1(R (S::*)(A0,A1,A2)const)
{
return cast_helper<S,R(T::*)(A0,A1,A2)const>();
}
template <class S, class R, class A0, class A1, class A2, class A3>
static cast_helper<S,R(T::*)(A0,A1,A2,A3)const> stage1(R (S::*)(A0,A1,A2,A3)const)
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3)const>();
}
template <class S, class R, class A0, class A1, class A2, class A3, class A4>
static cast_helper<S,R(T::*)(A0,A1,A2,A3,A4)const> stage1(R (S::*)(A0,A1,A2,A3,A4)const)
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3,A4)const>();
}
template <class S, class R, class A0, class A1, class A2, class A3, class A4, class A5>
static cast_helper<S,R(T::*)(A0,A1,A2,A3,A4,A5)const> stage1(R (S::*)(A0,A1,A2,A3,A4,A5)const)
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3,A4,A5)const>();
}
template <class S, class R>
static cast_helper<S,R(T::*)()volatile> stage1(R (S::*)()volatile)
{
return cast_helper<S,R(T::*)()volatile>();
}
template <class S, class R, class A0>
static cast_helper<S,R(T::*)(A0)volatile> stage1(R (S::*)(A0)volatile)
{
return cast_helper<S,R(T::*)(A0)volatile>();
}
template <class S, class R, class A0, class A1>
static cast_helper<S,R(T::*)(A0,A1)volatile> stage1(R (S::*)(A0,A1)volatile)
{
return cast_helper<S,R(T::*)(A0,A1)volatile>();
}
template <class S, class R, class A0, class A1,class A2>
static cast_helper<S,R(T::*)(A0,A1,A2)volatile> stage1(R (S::*)(A0,A1,A2)volatile)
{
return cast_helper<S,R(T::*)(A0,A1,A2)volatile>();
}
template <class S, class R, class A0, class A1, class A2, class A3>
static cast_helper<S,R(T::*)(A0,A1,A2,A3)volatile> stage1(R (S::*)(A0,A1,A2,A3)volatile)
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3)volatile>();
}
template <class S, class R, class A0, class A1, class A2, class A3, class A4>
static cast_helper<S,R(T::*)(A0,A1,A2,A3,A4)volatile> stage1(R (S::*)(A0,A1,A2,A3,A4)volatile)
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3,A4)volatile>();
}
template <class S, class R, class A0, class A1, class A2, class A3, class A4, class A5>
static cast_helper<S,R(T::*)(A0,A1,A2,A3,A4,A5)volatile> stage1(R (S::*)(A0,A1,A2,A3,A4,A5)volatile)
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3,A4,A5)volatile>();
}
template <class S, class R>
static cast_helper<S,R(T::*)()const volatile> stage1(R (S::*)()const volatile)
{
return cast_helper<S,R(T::*)()const volatile>();
}
template <class S, class R, class A0>
static cast_helper<S,R(T::*)(A0)const volatile> stage1(R (S::*)(A0)const volatile)
{
return cast_helper<S,R(T::*)(A0)const volatile>();
}
template <class S, class R, class A0, class A1>
static cast_helper<S,R(T::*)(A0,A1)const volatile> stage1(R (S::*)(A0,A1)const volatile)
{
return cast_helper<S,R(T::*)(A0,A1)const volatile>();
}
template <class S, class R, class A0, class A1,class A2>
static cast_helper<S,R(T::*)(A0,A1,A2)const volatile> stage1(R (S::*)(A0,A1,A2)const volatile)
{
return cast_helper<S,R(T::*)(A0,A1,A2)const volatile>();
}
template <class S, class R, class A0, class A1, class A2, class A3>
static cast_helper<S,R(T::*)(A0,A1,A2,A3)const volatile> stage1(R (S::*)(A0,A1,A2,A3)const volatile)
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3)const volatile>();
}
template <class S, class R, class A0, class A1, class A2, class A3, class A4>
static cast_helper<S,R(T::*)(A0,A1,A2,A3,A4)const volatile> stage1(R (S::*)(A0,A1,A2,A3,A4)const volatile)
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3,A4)const volatile>();
}
template <class S, class R, class A0, class A1, class A2, class A3, class A4, class A5>
static cast_helper<S,R(T::*)(A0,A1,A2,A3,A4,A5)const volatile> stage1(R (S::*)(A0,A1,A2,A3,A4,A5)const volatile)
{
return cast_helper<S,R(T::*)(A0,A1,A2,A3,A4,A5)const volatile>();
}
BOOST_PYTHON_REPEAT_MF_ALL_CV_2ND(BOOST_PYTHON_MEMBER_FUNCTION_CAST_STAGE1);
};

View File

@@ -61,17 +61,8 @@ namespace boost { namespace python { namespace detail {
# define BOOST_PYTHON_MF_ARITY_FINISH BOOST_PP_INC(BOOST_PYTHON_MAX_ARITY)
#endif
# define BOOST_PYTHON_NAMED_PF(f,Count) \
R(*f)(BOOST_MPL_TEMPLATE_PARAMETERS(0,Count,A))
# define BOOST_PYTHON_NAMED_PMF(f, Count, cv) \
R(A0::*f)(BOOST_MPL_TEMPLATE_PARAMETERS(1,Count,A))cv()
# define BOOST_PYTHON_PF(Count) \
R(*)(BOOST_MPL_TEMPLATE_PARAMETERS(0,Count,A))
# define BOOST_PYTHON_PMF(Count, cv) \
R(A0::*)(BOOST_MPL_TEMPLATE_PARAMETERS(1,Count,A))cv()
# define BOOST_PYTHON_FN(inner,start,count) \
R(inner)(BOOST_MPL_TEMPLATE_PARAMETERS(start,count,A))
# define BOOST_PYTHON_REPEAT_ARITY_2ND(function,data) \
BOOST_PP_REPEAT_FROM_TO_2ND( \

View File

@@ -0,0 +1,250 @@
// Copyright David Abrahams 2002. Permission to copy, use,
// modify, sell and distribute this software is granted provided this
// copyright notice appears in all copies. This software is provided
// "as is" without express or implied warranty, and with no claim as
// to its suitability for any purpose.
#ifndef MEMBER_FUNCTION_CAST_DWA2002410_HPP
# define MEMBER_FUNCTION_CAST_DWA2002410_HPP
template<class S,class R>
static cast_helper<S,R(T::*)()>
stage1(R(S::*)())
{
return cast_helper<S,R(T::*)()>();
}
template<class S,class R,class A1>
static cast_helper<S,R(T::*)(A1)>
stage1(R(S::*)(A1))
{
return cast_helper<S,R(T::*)(A1)>();
}
template<class S,class R,class A1,class A2>
static cast_helper<S,R(T::*)(A1,A2)>
stage1(R(S::*)(A1,A2))
{
return cast_helper<S,R(T::*)(A1,A2)>();
}
template<class S,class R,class A1,class A2,class A3>
static cast_helper<S,R(T::*)(A1,A2,A3)>
stage1(R(S::*)(A1,A2,A3))
{
return cast_helper<S,R(T::*)(A1,A2,A3)>();
}
template<class S,class R,class A1,class A2,class A3,class A4>
static cast_helper<S,R(T::*)(A1,A2,A3,A4)>
stage1(R(S::*)(A1,A2,A3,A4))
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4)>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5)>
stage1(R(S::*)(A1,A2,A3,A4,A5))
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5)>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6)>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6))
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6)>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7)>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7))
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7)>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8)>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7,A8))
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8)>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9))
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)>();
}
template<class S,class R>
static cast_helper<S,R(T::*)()const>
stage1(R(S::*)()const)
{
return cast_helper<S,R(T::*)()const>();
}
template<class S,class R,class A1>
static cast_helper<S,R(T::*)(A1)const>
stage1(R(S::*)(A1)const)
{
return cast_helper<S,R(T::*)(A1)const>();
}
template<class S,class R,class A1,class A2>
static cast_helper<S,R(T::*)(A1,A2)const>
stage1(R(S::*)(A1,A2)const)
{
return cast_helper<S,R(T::*)(A1,A2)const>();
}
template<class S,class R,class A1,class A2,class A3>
static cast_helper<S,R(T::*)(A1,A2,A3)const>
stage1(R(S::*)(A1,A2,A3)const)
{
return cast_helper<S,R(T::*)(A1,A2,A3)const>();
}
template<class S,class R,class A1,class A2,class A3,class A4>
static cast_helper<S,R(T::*)(A1,A2,A3,A4)const>
stage1(R(S::*)(A1,A2,A3,A4)const)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4)const>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5)const>
stage1(R(S::*)(A1,A2,A3,A4,A5)const)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5)const>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6)const>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6)const)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6)const>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7)const>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7)const)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7)const>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8)const>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7,A8)const)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8)const>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)const>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)const)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)const>();
}
template<class S,class R>
static cast_helper<S,R(T::*)()volatile>
stage1(R(S::*)()volatile)
{
return cast_helper<S,R(T::*)()volatile>();
}
template<class S,class R,class A1>
static cast_helper<S,R(T::*)(A1)volatile>
stage1(R(S::*)(A1)volatile)
{
return cast_helper<S,R(T::*)(A1)volatile>();
}
template<class S,class R,class A1,class A2>
static cast_helper<S,R(T::*)(A1,A2)volatile>
stage1(R(S::*)(A1,A2)volatile)
{
return cast_helper<S,R(T::*)(A1,A2)volatile>();
}
template<class S,class R,class A1,class A2,class A3>
static cast_helper<S,R(T::*)(A1,A2,A3)volatile>
stage1(R(S::*)(A1,A2,A3)volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3)volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4>
static cast_helper<S,R(T::*)(A1,A2,A3,A4)volatile>
stage1(R(S::*)(A1,A2,A3,A4)volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4)volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5)volatile>
stage1(R(S::*)(A1,A2,A3,A4,A5)volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5)volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6)volatile>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6)volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6)volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7)volatile>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7)volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7)volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8)volatile>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7,A8)volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8)volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)volatile>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)volatile>();
}
template<class S,class R>
static cast_helper<S,R(T::*)()const volatile>
stage1(R(S::*)()const volatile)
{
return cast_helper<S,R(T::*)()const volatile>();
}
template<class S,class R,class A1>
static cast_helper<S,R(T::*)(A1)const volatile>
stage1(R(S::*)(A1)const volatile)
{
return cast_helper<S,R(T::*)(A1)const volatile>();
}
template<class S,class R,class A1,class A2>
static cast_helper<S,R(T::*)(A1,A2)const volatile>
stage1(R(S::*)(A1,A2)const volatile)
{
return cast_helper<S,R(T::*)(A1,A2)const volatile>();
}
template<class S,class R,class A1,class A2,class A3>
static cast_helper<S,R(T::*)(A1,A2,A3)const volatile>
stage1(R(S::*)(A1,A2,A3)const volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3)const volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4>
static cast_helper<S,R(T::*)(A1,A2,A3,A4)const volatile>
stage1(R(S::*)(A1,A2,A3,A4)const volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4)const volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5)const volatile>
stage1(R(S::*)(A1,A2,A3,A4,A5)const volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5)const volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6)const volatile>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6)const volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6)const volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7)const volatile>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7)const volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7)const volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8)const volatile>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7,A8)const volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8)const volatile>();
}
template<class S,class R,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9>
static cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)const volatile>
stage1(R(S::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)const volatile)
{
return cast_helper<S,R(T::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9)const volatile>();
}
#endif // MEMBER_FUNCTION_CAST_DWA2002410_HPP