2626# include < boost/preprocessor/arithmetic/inc.hpp>
2727# include < boost/preprocessor/repetition/enum_trailing_params.hpp>
2828
29- # define BOOST_PYTHON_FUNCTION_SIGNATURE_LIST (n ) \
29+ # define BOOST_PYTHON_LIST_INC (n ) \
3030 BOOST_PP_CAT (mpl::list, BOOST_PP_INC(n))
3131
32- # define BOOST_PYTHON_MEMBER_FUNCTION_SIGNATURE_LIST (n ) \
33- BOOST_PP_CAT (mpl::list, BOOST_PP_INC(BOOST_PP_INC(n)))
34-
35-
3632// /////////////////////////////////////////////////////////////////////////////
3733namespace boost { namespace python { namespace detail {
3834
@@ -47,18 +43,13 @@ namespace boost { namespace python { namespace detail {
4743// return mpl::list<RT, T0...TN>();
4844// }
4945//
50- // template <class RT, class ClassT, class T0... class TN>
51- // inline mpl::list<RT, ClassT, T0...TN>
52- // get_signature(RT(ClassT::*)(T0...TN)))
53- // {
54- // return mpl::list<RT, ClassT, T0...TN>();
55- // }
46+ // And, for an appropriate assortment of cv-qualifications
5647//
5748// template <class RT, class ClassT, class T0... class TN>
58- // inline mpl::list<RT, ClassT, T0...TN>
59- // get_signature(RT(ClassT::*)(T0...TN) const ))
49+ // inline mpl::list<RT, ClassT cv& , T0...TN>
50+ // get_signature(RT(ClassT::*)(T0...TN) cv ))
6051// {
61- // return mpl::list<RT, ClassT const , T0...TN>();
52+ // return mpl::list<RT, ClassT& , T0...TN>();
6253// }
6354//
6455// These functions extract the return type, class (for member functions)
@@ -68,7 +59,7 @@ namespace boost { namespace python { namespace detail {
6859
6960// /////////////////////////////////////////////////////////////////////////////
7061# define BOOST_PP_ITERATION_PARAMS_1 \
71- (3 , (0 , BOOST_PYTHON_MAX_ARITY- 1 , <boost/python/signature.hpp>))
62+ (3 , (0 , BOOST_PYTHON_MAX_ARITY, <boost/python/signature.hpp>))
7263
7364# include BOOST_PP_ITERATE()
7465
@@ -77,59 +68,49 @@ namespace boost { namespace python { namespace detail {
7768}} // namespace boost::python
7869
7970
80- # undef BOOST_PYTHON_FUNCTION_SIGNATURE_LIST
81- # undef BOOST_PYTHON_MEMBER_FUNCTION_SIGNATURE_LIST
71+ # undef BOOST_PYTHON_LIST_INC
8272
8373// /////////////////////////////////////////////////////////////////////////////
8474# endif // SIGNATURE_JDG20020813_HPP
8575
86- #else // defined(BOOST_PP_IS_ITERATING)
76+ #elif BOOST_PP_ITERATION_DEPTH() == 1 // defined(BOOST_PP_IS_ITERATING)
8777
8878# define N BOOST_PP_ITERATION ()
8979
90- # define BOOST_PYTHON_SIGNATURE_PARAMS BOOST_PP_ENUM_TRAILING_PARAMS_Z (1 , N, class T )
91- # define BOOST_PYTHON_SIGNATURE_TYPES BOOST_PP_ENUM_PARAMS_Z (1 , N, T)
92- # define BOOST_PYTHON_TRAILING_SIGNATURE_TYPES BOOST_PP_COMMA_IF (N) BOOST_PYTHON_SIGNATURE_TYPES
93-
9480template <
95- class RT BOOST_PYTHON_SIGNATURE_PARAMS >
96- inline BOOST_PYTHON_FUNCTION_SIGNATURE_LIST (N)<
97- RT BOOST_PYTHON_TRAILING_SIGNATURE_TYPES >
98- get_signature(RT(*)(BOOST_PYTHON_SIGNATURE_TYPES ))
81+ class RT BOOST_PP_ENUM_TRAILING_PARAMS_Z( 1 , N, class T ) >
82+ inline BOOST_PYTHON_LIST_INC (N)<
83+ RT BOOST_PP_ENUM_TRAILING_PARAMS_Z( 1 , N, T) >
84+ get_signature(RT(*)(BOOST_PP_ENUM_PARAMS_Z( 1 , N, T) ))
9985{
100- return BOOST_PYTHON_FUNCTION_SIGNATURE_LIST (N)<
101- RT BOOST_PYTHON_TRAILING_SIGNATURE_TYPES
86+ return BOOST_PYTHON_LIST_INC (N)<
87+ RT BOOST_PP_ENUM_TRAILING_PARAMS_Z ( 1 , N, T)
10288 >();
10389}
10490
105- // /////////////////////////////////////////////////////////////////////////////
106- #if N <= (BOOST_PYTHON_MAX_ARITY - 2)
91+ # undef N
10792
108- template <
109- class RT , class ClassT BOOST_PYTHON_SIGNATURE_PARAMS>
110- inline BOOST_PYTHON_MEMBER_FUNCTION_SIGNATURE_LIST (N)<
111- RT, ClassT BOOST_PYTHON_TRAILING_SIGNATURE_TYPES >
112- get_signature(RT(ClassT::*)(BOOST_PYTHON_SIGNATURE_TYPES))
113- {
114- return BOOST_PYTHON_MEMBER_FUNCTION_SIGNATURE_LIST (N)<
115- RT, ClassT BOOST_PYTHON_TRAILING_SIGNATURE_TYPES>();
116- }
93+ # define BOOST_PP_ITERATION_PARAMS_2 \
94+ (3 , (0 , BOOST_PYTHON_CV_COUNT - 1 , <boost/python/signature.hpp>))
95+ # include BOOST_PP_ITERATE()
96+
97+ #else
98+
99+ # define N BOOST_PP_RELATIVE_ITERATION (1 )
100+ # define Q BOOST_PYTHON_CV_QUALIFIER (BOOST_PP_ITERATION())
117101
118- // /////////////////////////////////////
119102template <
120- class RT , class ClassT BOOST_PYTHON_SIGNATURE_PARAMS >
121- inline BOOST_PYTHON_MEMBER_FUNCTION_SIGNATURE_LIST (N )<
122- RT, ClassT const BOOST_PYTHON_TRAILING_SIGNATURE_TYPES >
123- get_signature(RT(ClassT::*)(BOOST_PYTHON_SIGNATURE_TYPES) const )
103+ class RT, class ClassT BOOST_PP_ENUM_TRAILING_PARAMS_Z( 1 , N, class T ) >
104+ inline BOOST_PYTHON_LIST_INC(BOOST_PP_INC(N) )<
105+ RT, ClassT Q& BOOST_PP_ENUM_TRAILING_PARAMS_Z( 1 , N, T) >
106+ get_signature(RT(ClassT::*)(BOOST_PP_ENUM_PARAMS_Z( 1 , N, T)) Q )
124107{
125- return BOOST_PYTHON_MEMBER_FUNCTION_SIGNATURE_LIST (N)<
126- RT, ClassT const BOOST_PYTHON_TRAILING_SIGNATURE_TYPES>();
108+ return BOOST_PYTHON_LIST_INC (BOOST_PP_INC (N))<
109+ RT, ClassT Q & BOOST_PP_ENUM_TRAILING_PARAMS_Z (1 , N, T)
110+ >();
127111}
128112
129- #endif // N < (BOOST_PYTHON_MAX_ARITY - 2)
130-
131- # undef BOOST_PYTHON_SIGNATURE_PARAMS
132- # undef BOOST_PYTHON_SIGNATURE_TYPES
133- # undef BOOST_PYTHON_TRAILING_SIGNATURE_TYPES
113+ # undef Q
114+ # undef N
134115
135116#endif // !defined(BOOST_PP_IS_ITERATING)
0 commit comments