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
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
4144namespace 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