Chris@16
|
1 /*==============================================================================
|
Chris@16
|
2 Copyright (c) 2010 Thomas Heller
|
Chris@16
|
3
|
Chris@16
|
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
6 ==============================================================================*/
|
Chris@16
|
7
|
Chris@16
|
8 #if !BOOST_PHOENIX_IS_ITERATING
|
Chris@16
|
9
|
Chris@16
|
10 #define BOOST_PHOENIX_typename_A(N) \
|
Chris@16
|
11 BOOST_PP_ENUM_PARAMS(N, typename A) \
|
Chris@16
|
12 /**/
|
Chris@16
|
13
|
Chris@16
|
14 #define BOOST_PHOENIX_typename_A_void(N) \
|
Chris@16
|
15 BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(N, typename A, void) \
|
Chris@16
|
16 /**/
|
Chris@16
|
17
|
Chris@16
|
18 #define BOOST_PHOENIX_A(N) \
|
Chris@16
|
19 BOOST_PP_ENUM_PARAMS(N, A) \
|
Chris@16
|
20 /**/
|
Chris@16
|
21
|
Chris@16
|
22 #define BOOST_PHOENIX_A_ref(N) \
|
Chris@16
|
23 BOOST_PP_ENUM_BINARY_PARAMS(N, A, & BOOST_PP_INTERCEPT) \
|
Chris@16
|
24 /**/
|
Chris@16
|
25
|
Chris@16
|
26 #define BOOST_PHOENIX_A_const_ref(N) \
|
Chris@16
|
27 BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& BOOST_PP_INTERCEPT) \
|
Chris@16
|
28 /**/
|
Chris@16
|
29
|
Chris@16
|
30 #define BOOST_PHOENIX_A_a(N) \
|
Chris@16
|
31 BOOST_PP_ENUM_BINARY_PARAMS(N, A, a) \
|
Chris@16
|
32 /**/
|
Chris@16
|
33
|
Chris@16
|
34 #define BOOST_PHOENIX_A_ref_a(N) \
|
Chris@16
|
35 BOOST_PP_ENUM_BINARY_PARAMS(N, A, & a) \
|
Chris@16
|
36 /**/
|
Chris@16
|
37
|
Chris@16
|
38 #define BOOST_PHOENIX_A_const_ref_a(N) \
|
Chris@16
|
39 BOOST_PP_ENUM_BINARY_PARAMS(N, A, const& a) \
|
Chris@16
|
40 /**/
|
Chris@16
|
41
|
Chris@16
|
42 #define BOOST_PHOENIX_a(N) \
|
Chris@16
|
43 BOOST_PP_ENUM_PARAMS(N, a) \
|
Chris@16
|
44 /**/
|
Chris@16
|
45
|
Chris@16
|
46 #else
|
Chris@16
|
47
|
Chris@16
|
48 #include <boost/preprocessor/repetition/repeat.hpp>
|
Chris@16
|
49 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
Chris@16
|
50 #include <boost/preprocessor/repetition/enum_params.hpp>
|
Chris@16
|
51 #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
|
Chris@16
|
52 #include <boost/preprocessor/seq/elem.hpp>
|
Chris@16
|
53 #include <boost/preprocessor/seq/enum.hpp>
|
Chris@16
|
54 #include <boost/preprocessor/seq/for_each_i.hpp>
|
Chris@16
|
55 #include <boost/preprocessor/seq/for_each_product.hpp>
|
Chris@16
|
56 #include <boost/preprocessor/seq/size.hpp>
|
Chris@16
|
57 #include <boost/preprocessor/tuple/elem.hpp>
|
Chris@16
|
58
|
Chris@16
|
59 #define BOOST_PHOENIX_ITERATION \
|
Chris@16
|
60 BOOST_PP_ITERATION() \
|
Chris@16
|
61 /**/
|
Chris@16
|
62
|
Chris@16
|
63 #define BOOST_PHOENIX_typename_A \
|
Chris@16
|
64 BOOST_PP_ENUM_PARAMS(BOOST_PHOENIX_ITERATION, typename A) \
|
Chris@16
|
65 /**/
|
Chris@16
|
66
|
Chris@16
|
67 #define BOOST_PHOENIX_typename_A_void \
|
Chris@16
|
68 BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PHOENIX_ITERATION, typename A, void)
|
Chris@16
|
69 /**/
|
Chris@16
|
70
|
Chris@16
|
71 #define BOOST_PHOENIX_A \
|
Chris@16
|
72 BOOST_PP_ENUM_PARAMS(BOOST_PHOENIX_ITERATION, A) \
|
Chris@16
|
73 /**/
|
Chris@16
|
74
|
Chris@16
|
75 #define BOOST_PHOENIX_A_ref \
|
Chris@16
|
76 BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PHOENIX_ITERATION, A, & BOOST_PP_INTERCEPT)\
|
Chris@16
|
77 /**/
|
Chris@16
|
78
|
Chris@16
|
79 #define BOOST_PHOENIX_A_const_ref \
|
Chris@16
|
80 BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PHOENIX_ITERATION, A, const& BOOST_PP_INTERCEPT)\
|
Chris@16
|
81 /**/
|
Chris@16
|
82
|
Chris@16
|
83 #define BOOST_PHOENIX_A_a \
|
Chris@16
|
84 BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PHOENIX_ITERATION, A, a) \
|
Chris@16
|
85 /**/
|
Chris@16
|
86
|
Chris@16
|
87 #define BOOST_PHOENIX_A_ref_a \
|
Chris@16
|
88 BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PHOENIX_ITERATION, A, & a) \
|
Chris@16
|
89 /**/
|
Chris@16
|
90
|
Chris@16
|
91 #define BOOST_PHOENIX_A_const_ref_a \
|
Chris@16
|
92 BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PHOENIX_ITERATION, A, const& a) \
|
Chris@16
|
93 /**/
|
Chris@16
|
94
|
Chris@16
|
95 #define BOOST_PHOENIX_a \
|
Chris@16
|
96 BOOST_PP_ENUM_PARAMS(BOOST_PHOENIX_ITERATION, a) \
|
Chris@16
|
97 /**/
|
Chris@16
|
98
|
Chris@16
|
99 /////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
100 // Begin Perfect Forward argument permutation calculation
|
Chris@16
|
101 /////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
102 #define BOOST_PHOENIX_M0_R(_, N, __) \
|
Chris@16
|
103 (((A ## N)(&))((A ## N)(const&))) \
|
Chris@16
|
104 /**/
|
Chris@16
|
105
|
Chris@16
|
106 #define BOOST_PHOENIX_M0 \
|
Chris@16
|
107 BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, BOOST_PHOENIX_M0_R, _) \
|
Chris@16
|
108 /**/
|
Chris@16
|
109
|
Chris@16
|
110 #define BOOST_PHOENIX_M1_R_R(_, N, SEQ) \
|
Chris@16
|
111 BOOST_PP_SEQ_ELEM(N, SEQ) \
|
Chris@16
|
112 /**/
|
Chris@16
|
113
|
Chris@16
|
114 #define BOOST_PHOENIX_M1_R(R, __, ___, ELEM) \
|
Chris@16
|
115 (BOOST_PP_REPEAT(BOOST_PP_SEQ_SIZE(ELEM), BOOST_PHOENIX_M1_R_R, ELEM)) \
|
Chris@16
|
116 /**/
|
Chris@16
|
117
|
Chris@16
|
118 #define BOOST_PHOENIX_M1(R, PRODUCT) \
|
Chris@16
|
119 ((BOOST_PP_SEQ_ENUM \
|
Chris@16
|
120 (BOOST_PP_SEQ_FOR_EACH_I_R \
|
Chris@16
|
121 (R, BOOST_PHOENIX_M1_R, _, PRODUCT)))) \
|
Chris@16
|
122 /**/
|
Chris@16
|
123
|
Chris@16
|
124 #define BOOST_PHOENIX_PERM_SEQ \
|
Chris@16
|
125 BOOST_PP_SEQ_FOR_EACH_PRODUCT(BOOST_PHOENIX_M1, BOOST_PHOENIX_M0) \
|
Chris@16
|
126 /**/
|
Chris@16
|
127 ////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
128 // End
|
Chris@16
|
129 ////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
130
|
Chris@16
|
131 #define BOOST_PHOENIX_PERM_SIZE \
|
Chris@16
|
132 BOOST_PP_SEQ_SIZE(BOOST_PHOENIX_PERM_SEQ) \
|
Chris@16
|
133 /**/
|
Chris@16
|
134
|
Chris@16
|
135 #define BOOST_PHOENIX_M2(_, N, TUPLE) \
|
Chris@16
|
136 BOOST_PP_COMMA_IF(N) BOOST_PP_TUPLE_ELEM(BOOST_PHOENIX_ITERATION, N, TUPLE) \
|
Chris@16
|
137 /**/
|
Chris@16
|
138
|
Chris@16
|
139 #define BOOST_PHOENIX_M3(_, N, TUPLE) \
|
Chris@16
|
140 BOOST_PP_COMMA_IF(N) BOOST_PP_TUPLE_ELEM(BOOST_PHOENIX_ITERATION, N, TUPLE) a ## N\
|
Chris@16
|
141 /**/
|
Chris@16
|
142
|
Chris@16
|
143 #define BOOST_PHOENIX_PERM_ELEM(N) \
|
Chris@16
|
144 BOOST_PP_SEQ_ELEM(N, BOOST_PHOENIX_PERM_SEQ) \
|
Chris@16
|
145 /**/
|
Chris@16
|
146
|
Chris@16
|
147 #define BOOST_PHOENIX_PERM_A(N) \
|
Chris@16
|
148 BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, BOOST_PHOENIX_M2, BOOST_PHOENIX_PERM_ELEM(N))\
|
Chris@16
|
149 /**/
|
Chris@16
|
150
|
Chris@16
|
151 #define BOOST_PHOENIX_PERM_A_a(N) \
|
Chris@16
|
152 BOOST_PP_REPEAT(BOOST_PHOENIX_ITERATION, BOOST_PHOENIX_M3, BOOST_PHOENIX_PERM_ELEM(N))\
|
Chris@16
|
153 /**/
|
Chris@16
|
154
|
Chris@16
|
155 #endif
|