Skip to content

Commit b7e300d

Browse files
committed
latest signature
[SVN r15010]
1 parent 4bd680c commit b7e300d

1 file changed

Lines changed: 201 additions & 158 deletions

File tree

include/boost/python/signature.hpp

Lines changed: 201 additions & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
// to its suitability for any purpose.
88
//
99
///////////////////////////////////////////////////////////////////////////////
10+
#if !defined(BOOST_PP_IS_ITERATING)
11+
1012
#ifndef SIGNATURE_JDG20020813_HPP
1113
#define SIGNATURE_JDG20020813_HPP
1214

@@ -15,6 +17,7 @@
1517
#include <boost/preprocessor/enum_params.hpp>
1618
#include <boost/preprocessor/empty.hpp>
1719
#include <boost/preprocessor/arithmetic/sub.hpp>
20+
#include <boost/preprocessor/iterate.hpp>
1821
#include <boost/mpl/type_list.hpp>
1922

2023
///////////////////////////////////////////////////////////////////////////////
@@ -40,15 +43,6 @@ struct signature {};
4043

4144
namespace detail {
4245

43-
///////////////////////////////////////////////////////////////////////////////
44-
// Temporary BOOST_PP fix before the CVS stabalizes /*$$$ FIX ME $$$*/
45-
46-
#ifndef BOOST_PP_FIX_REPEAT_2ND
47-
#define BOOST_PP_FIX_REPEAT_2ND(c, m, d) /* ... */ \
48-
BOOST_PP_CAT(BOOST_PP_R2_, c)(m, d) \
49-
/**/
50-
#endif
51-
5246
///////////////////////////////////////////////////////////////////////////////
5347
//
5448
// The following macros generate expansions for:
@@ -102,165 +96,214 @@ namespace detail {
10296
#define BPL_IMPL_TEMPLATE_GEN(INDEX, DATA) typename BOOST_PP_CAT(T, INDEX)
10397

10498
///////////////////////////////////////////////////////////////////////////////
105-
#define BPL_IMPL_GET_FUNCTION_SIGNATURE(INDEX, DATA) \
106-
\
107-
template \
108-
< \
109-
typename RT BOOST_PP_COMMA_IF(INDEX) \
110-
BOOST_PP_ENUM \
111-
( \
112-
INDEX, \
113-
BPL_IMPL_TEMPLATE_GEN, \
114-
BOOST_PP_EMPTY \
115-
) \
116-
> \
117-
inline boost::mpl::type_list \
118-
< \
119-
RT BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T) \
120-
> \
121-
get_signature(signature<RT(*)(BOOST_PP_ENUM_PARAMS(INDEX, T))>) \
122-
{ \
123-
return boost::mpl::type_list \
124-
<RT BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T)>(); \
125-
} \
126-
\
127-
template \
128-
< \
129-
typename RT BOOST_PP_COMMA_IF(INDEX) \
130-
BOOST_PP_ENUM \
131-
( \
132-
INDEX, \
133-
BPL_IMPL_TEMPLATE_GEN, \
134-
BOOST_PP_EMPTY \
135-
) \
136-
> \
137-
inline boost::mpl::type_list \
138-
< \
139-
RT BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T) \
140-
> \
141-
get_signature(RT(*)(BOOST_PP_ENUM_PARAMS(INDEX, T))) \
142-
{ \
143-
return boost::mpl::type_list \
144-
<RT BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T)>(); \
145-
} \
99+
#define BOOST_PP_ITERATION_PARAMS_1 \
100+
(3, (0, BOOST_PYTHON_MAX_ARITY-1, <boost/python/signature.hpp>))
146101

147-
///////////////////////////////////////////////////////////////////////////////
148-
#define BPL_IMPL_GET_MEMBER_FUNCTION_SIGNATURE(INDEX, DATA) \
149-
\
150-
template \
151-
< \
152-
typename RT, typename ClassT BOOST_PP_COMMA_IF(INDEX) \
153-
BOOST_PP_ENUM \
154-
( \
155-
INDEX, \
156-
BPL_IMPL_TEMPLATE_GEN, \
157-
BOOST_PP_EMPTY \
158-
) \
159-
> \
160-
inline boost::mpl::type_list \
161-
< \
162-
RT, ClassT BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T) \
163-
> \
164-
get_signature(signature<RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(INDEX, T))>) \
165-
{ \
166-
return boost::mpl::type_list \
167-
<RT, ClassT BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T)>\
168-
(); \
169-
} \
170-
\
171-
\
172-
template \
173-
< \
174-
typename RT, typename ClassT BOOST_PP_COMMA_IF(INDEX) \
175-
BOOST_PP_ENUM \
176-
( \
177-
INDEX, \
178-
BPL_IMPL_TEMPLATE_GEN, \
179-
BOOST_PP_EMPTY \
180-
) \
181-
> \
182-
inline boost::mpl::type_list \
183-
< \
184-
RT, ClassT BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T) \
185-
> \
186-
get_signature( \
187-
signature<RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(INDEX, T)) const>) \
188-
{ \
189-
return boost::mpl::type_list \
190-
< \
191-
RT, ClassT const \
192-
BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T) \
193-
>(); \
194-
} \
195-
\
196-
template \
197-
< \
198-
typename RT, typename ClassT BOOST_PP_COMMA_IF(INDEX) \
199-
BOOST_PP_ENUM \
200-
( \
201-
INDEX, \
202-
BPL_IMPL_TEMPLATE_GEN, \
203-
BOOST_PP_EMPTY \
204-
) \
205-
> \
206-
inline boost::mpl::type_list \
207-
< \
208-
RT, ClassT BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T) \
209-
> \
210-
get_signature(RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(INDEX, T))) \
211-
{ \
212-
return boost::mpl::type_list \
213-
<RT, ClassT BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T)>\
214-
(); \
215-
} \
216-
\
217-
template \
218-
< \
219-
typename RT, typename ClassT BOOST_PP_COMMA_IF(INDEX) \
220-
BOOST_PP_ENUM \
221-
( \
222-
INDEX, \
223-
BPL_IMPL_TEMPLATE_GEN, \
224-
BOOST_PP_EMPTY \
225-
) \
226-
> \
227-
inline boost::mpl::type_list \
228-
< \
229-
RT, ClassT const \
230-
BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T) \
231-
> \
232-
get_signature(RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(INDEX, T)) const) \
233-
{ \
234-
return boost::mpl::type_list \
235-
< \
236-
RT, ClassT const \
237-
BOOST_PP_COMMA_IF(INDEX) BOOST_PP_ENUM_PARAMS(INDEX, T) \
238-
>(); \
239-
} \
102+
#include BOOST_PP_ITERATE()
103+
#undef BPL_IMPL_TEMPLATE_GEN
104+
105+
}
106+
107+
}} // namespace boost::python
240108

241109
///////////////////////////////////////////////////////////////////////////////
110+
#endif // SIGNATURE_JDG20020813_HPP
242111

243-
BOOST_PP_FIX_REPEAT_2ND \
244-
( \
245-
BOOST_PP_SUB(BOOST_PYTHON_MAX_ARITY, 1), \
246-
BPL_IMPL_GET_FUNCTION_SIGNATURE, BOOST_PP_EMPTY \
247-
)
248112

249-
BOOST_PP_FIX_REPEAT_2ND \
250-
( \
251-
BOOST_PP_SUB(BOOST_PYTHON_MAX_ARITY, 2), \
252-
BPL_IMPL_GET_MEMBER_FUNCTION_SIGNATURE, BOOST_PP_EMPTY \
253-
)
113+
#else // defined(BOOST_PP_IS_ITERATING)
114+
// PP vertical iteration code
254115

255-
#undef BPL_IMPL_GET_FUNCTION_SIGNATURE
256-
#undef BPL_IMPL_GET_MEMBER_FUNCTION_SIGNATURE
257-
#undef BPL_IMPL_TEMPLATE_GEN
116+
///////////////////////////////////////////////////////////////////////////////
117+
template
118+
<
119+
typename RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
120+
BOOST_PP_ENUM
121+
(
122+
BOOST_PP_ITERATION(),
123+
BPL_IMPL_TEMPLATE_GEN,
124+
BOOST_PP_EMPTY
125+
)
126+
>
127+
inline boost::mpl::type_list
128+
<
129+
RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
130+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
131+
>
132+
get_signature
133+
(signature<RT(*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T))>)
134+
{
135+
return boost::mpl::type_list
136+
<
137+
RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
138+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
139+
>();
140+
}
258141

142+
///////////////////////////////////////
143+
#if !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1300))
144+
145+
template
146+
<
147+
typename RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
148+
BOOST_PP_ENUM
149+
(
150+
BOOST_PP_ITERATION(),
151+
BPL_IMPL_TEMPLATE_GEN,
152+
BOOST_PP_EMPTY
153+
)
154+
>
155+
inline boost::mpl::type_list
156+
<
157+
RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
158+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
159+
>
160+
get_signature
161+
(signature<RT(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T))>)
162+
{
163+
return boost::mpl::type_list
164+
<
165+
RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
166+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
167+
>();
259168
}
260169

261-
}} // namespace boost::python
170+
#endif // !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1300))
171+
172+
///////////////////////////////////////
173+
template
174+
<
175+
typename RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
176+
BOOST_PP_ENUM
177+
(
178+
BOOST_PP_ITERATION(),
179+
BPL_IMPL_TEMPLATE_GEN,
180+
BOOST_PP_EMPTY
181+
)
182+
>
183+
inline boost::mpl::type_list
184+
<
185+
RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
186+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
187+
>
188+
get_signature
189+
(RT(*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)))
190+
{
191+
return boost::mpl::type_list
192+
<
193+
RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
194+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
195+
>();
196+
}
262197

263198
///////////////////////////////////////////////////////////////////////////////
264-
#endif // SIGNATURE_JDG20020813_HPP
199+
#if BOOST_PP_ITERATION() <= (BOOST_PYTHON_MAX_ARITY - 2)
200+
201+
template
202+
<
203+
typename RT, typename ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
204+
BOOST_PP_ENUM
205+
(
206+
BOOST_PP_ITERATION(),
207+
BPL_IMPL_TEMPLATE_GEN,
208+
BOOST_PP_EMPTY
209+
)
210+
>
211+
inline boost::mpl::type_list
212+
<
213+
RT, ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
214+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
215+
>
216+
get_signature
217+
(signature<RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T))>)
218+
{
219+
return boost::mpl::type_list
220+
<
221+
RT, ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
222+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)>
223+
();
224+
}
225+
226+
///////////////////////////////////////
227+
template
228+
<
229+
typename RT, typename ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
230+
BOOST_PP_ENUM
231+
(
232+
BOOST_PP_ITERATION(),
233+
BPL_IMPL_TEMPLATE_GEN,
234+
BOOST_PP_EMPTY
235+
)
236+
>
237+
inline boost::mpl::type_list
238+
<
239+
RT, ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
240+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
241+
>
242+
get_signature
243+
(signature<RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)) const>)
244+
{
245+
return boost::mpl::type_list
246+
<
247+
RT, ClassT const
248+
BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
249+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
250+
>();
251+
}
252+
253+
///////////////////////////////////////
254+
template
255+
<
256+
typename RT, typename ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
257+
BOOST_PP_ENUM
258+
(
259+
BOOST_PP_ITERATION(),
260+
BPL_IMPL_TEMPLATE_GEN,
261+
BOOST_PP_EMPTY
262+
)
263+
>
264+
inline boost::mpl::type_list
265+
<
266+
RT, ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
267+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
268+
>
269+
get_signature
270+
(RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)))
271+
{
272+
return boost::mpl::type_list
273+
<
274+
RT, ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
275+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
276+
>();
277+
}
278+
279+
///////////////////////////////////////
280+
template
281+
<
282+
typename RT, typename ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
283+
BOOST_PP_ENUM
284+
(
285+
BOOST_PP_ITERATION(),
286+
BPL_IMPL_TEMPLATE_GEN,
287+
BOOST_PP_EMPTY
288+
)
289+
>
290+
inline boost::mpl::type_list
291+
<
292+
RT, ClassT const
293+
BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
294+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
295+
>
296+
get_signature
297+
(RT(ClassT::*)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)) const)
298+
{
299+
return boost::mpl::type_list
300+
<
301+
RT, ClassT const
302+
BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
303+
BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T)
304+
>();
305+
}
265306

307+
#endif // BOOST_PP_ITERATION() < (BOOST_PYTHON_MAX_ARITY - 2)
266308

309+
#endif // !defined(BOOST_PP_IS_ITERATING)

0 commit comments

Comments
 (0)