1 # /* **************************************************************************
2 # * *
3 # * (C) Copyright Paul Mensonides 2002.
4 # * Distributed under the Boost Software License, Version 1.0. (See
5 # * accompanying file LICENSE_1_0.txt or copy at
6 # * http://www.boost.org/LICENSE_1_0.txt)
7 # * *
8 # ************************************************************************** */
9 #
10 # /* See http://www.boost.org for most recent version. */
11 #
12 # if !BOOST_PP_IS_ITERATING
13 #
14 # include <boost/preprocessor/cat.hpp>
15 # include <boost/preprocessor/comparison/equal.hpp>
16 # include <boost/preprocessor/control/expr_iif.hpp>
17 # include <boost/preprocessor/iteration.hpp>
18 # include <boost/preprocessor/logical/bitor.hpp>
19 # include <libs/preprocessor/test/test.h>
20 #
21 # define NO_FLAGS
22 #
23 # define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 10, <libs/preprocessor/test/iteration.h>))
24 # include BOOST_PP_ITERATE()
25 #
26 # undef NO_FLAGS
27 #
28 # define BOOST_PP_ITERATION_PARAMS_1 (4, (1, 5, <libs/preprocessor/test/iteration.h>, 0x0001))
29 # include BOOST_PP_ITERATE()
30 #
31 # define BOOST_PP_ITERATION_PARAMS_1 (4, (1, 5, <libs/preprocessor/test/iteration.h>, 0x0002))
32 # include BOOST_PP_ITERATE()
33 #
34 # if BOOST_PP_LIMIT_ITERATION == 512
35 #
36 # define ITER100S(n) \
37 BOOST_PP_BITOR \
38 ( \
39 BOOST_PP_BITOR \
40 ( \
41 BOOST_PP_EQUAL(n,100), \
42 BOOST_PP_EQUAL(n,200) \
43 ), \
44 BOOST_PP_BITOR \
45 ( \
46 BOOST_PP_BITOR \
47 ( \
48 BOOST_PP_EQUAL(n,300), \
49 BOOST_PP_EQUAL(n,400) \
50 ), \
51 BOOST_PP_EQUAL(n,500) \
52 ) \
53 ) \
54 /* */
55 #
56 # define BOOST_PP_ITERATION_PARAMS_1 (4, (0, 512, <libs/preprocessor/test/iteration.h>, 0x0003))
57 # include BOOST_PP_ITERATE()
58 #
59 # undef ITER100S
60 #
61 # define ITER50S(n) \
62 BOOST_PP_BITOR \
63 ( \
64 BOOST_PP_BITOR \
65 ( \
66 BOOST_PP_EQUAL(n,450), \
67 BOOST_PP_EQUAL(n,350) \
68 ), \
69 BOOST_PP_BITOR \
70 ( \
71 BOOST_PP_BITOR \
72 ( \
73 BOOST_PP_EQUAL(n,250), \
74 BOOST_PP_EQUAL(n,150) \
75 ), \
76 BOOST_PP_EQUAL(n,50) \
77 ) \
78 ) \
79 /* */
80 #
81 # define BOOST_PP_ITERATION_PARAMS_1 (4, (512, 0, <libs/preprocessor/test/iteration.h>, 0x0004))
82 # include BOOST_PP_ITERATE()
83 #
84 # undef ITER50S
85 #
86 # endif
87 #
88 # if BOOST_PP_LIMIT_ITERATION == 1024
89 #
90 # define ITER100SA(n) \
91 BOOST_PP_BITOR \
92 ( \
93 BOOST_PP_BITOR \
94 ( \
95 BOOST_PP_BITOR \
96 ( \
97 BOOST_PP_EQUAL(n,100), \
98 BOOST_PP_EQUAL(n,200) \
99 ), \
100 BOOST_PP_BITOR \
101 ( \
102 BOOST_PP_BITOR \
103 ( \
104 BOOST_PP_EQUAL(n,300), \
105 BOOST_PP_EQUAL(n,400) \
106 ), \
107 BOOST_PP_EQUAL(n,500) \
108 ) \
109 ), \
110 BOOST_PP_BITOR \
111 ( \
112 BOOST_PP_BITOR \
113 ( \
114 BOOST_PP_EQUAL(n,600), \
115 BOOST_PP_EQUAL(n,700) \
116 ), \
117 BOOST_PP_BITOR \
118 ( \
119 BOOST_PP_BITOR \
120 ( \
121 BOOST_PP_EQUAL(n,800), \
122 BOOST_PP_EQUAL(n,900) \
123 ), \
124 BOOST_PP_EQUAL(n,1000) \
125 ) \
126 ) \
127 ) \
128 /* */
129 #
130 # define BOOST_PP_ITERATION_PARAMS_1 (4, (0, 1024, <libs/preprocessor/test/iteration.h>, 0x0005))
131 # include BOOST_PP_ITERATE()
132 #
133 # undef ITER100SA
134 #
135 # define ITER50SA(n) \
136 BOOST_PP_BITOR \
137 ( \
138 BOOST_PP_BITOR \
139 ( \
140 BOOST_PP_BITOR \
141 ( \
142 BOOST_PP_EQUAL(n,950), \
143 BOOST_PP_EQUAL(n,850) \
144 ), \
145 BOOST_PP_BITOR \
146 ( \
147 BOOST_PP_BITOR \
148 ( \
149 BOOST_PP_EQUAL(n,750), \
150 BOOST_PP_EQUAL(n,650) \
151 ), \
152 BOOST_PP_EQUAL(n,550) \
153 ) \
154 ), \
155 BOOST_PP_BITOR \
156 ( \
157 BOOST_PP_BITOR \
158 ( \
159 BOOST_PP_EQUAL(n,450), \
160 BOOST_PP_EQUAL(n,350) \
161 ), \
162 BOOST_PP_BITOR \
163 ( \
164 BOOST_PP_BITOR \
165 ( \
166 BOOST_PP_EQUAL(n,250), \
167 BOOST_PP_EQUAL(n,150) \
168 ), \
169 BOOST_PP_EQUAL(n,50) \
170 ) \
171 ) \
172 ) \
173 /* */
174 #
175 # define BOOST_PP_ITERATION_PARAMS_1 (4, (1024, 0, <libs/preprocessor/test/iteration.h>, 0x0006))
176 # include BOOST_PP_ITERATE()
177 #
178 # undef ITER50SA
179 #
180 # endif
181 #
182 # else
183 # if defined NO_FLAGS
184
BOOST_PP_CAT(X,BOOST_PP_ITERATION ())185 struct BOOST_PP_CAT(X, BOOST_PP_ITERATION()) {
186 BEGIN
187 BOOST_PP_ITERATION() >= BOOST_PP_ITERATION_START() &&
188 BOOST_PP_ITERATION() <= BOOST_PP_ITERATION_FINISH()
189 END
190 };
191
192 # elif BOOST_PP_ITERATION_DEPTH() == 1 \
193 && BOOST_PP_ITERATION_FLAGS() == 0x0001
194
BOOST_PP_CAT(Y,BOOST_PP_ITERATION ())195 struct BOOST_PP_CAT(Y, BOOST_PP_ITERATION()) { };
196
197 # elif BOOST_PP_ITERATION_DEPTH() == 1 \
198 && BOOST_PP_ITERATION_FLAGS() == 0x0002
199
200 # define BOOST_PP_ITERATION_PARAMS_2 (3, (1, BOOST_PP_ITERATION(), <libs/preprocessor/test/iteration.h>))
201 # include BOOST_PP_ITERATE()
202
203 # elif BOOST_PP_ITERATION_DEPTH() == 1 \
204 && BOOST_PP_ITERATION_FLAGS() == 0x0003
205
206 #define TEST_ITER_F(n) \
207 BOOST_PP_EXPR_IIF \
208 ( \
209 ITER100S(n), \
210 struct BOOST_PP_CAT(iter_512_f,n) { }; \
211 ) \
212 /* */
213
214 TEST_ITER_F(BOOST_PP_ITERATION())
215
216 # undef TEST_ITER_F
217
218 # elif BOOST_PP_ITERATION_DEPTH() == 1 \
219 && BOOST_PP_ITERATION_FLAGS() == 0x0004
220
221 #define TEST_ITER_B(n) \
222 BOOST_PP_EXPR_IIF \
223 ( \
224 ITER50S(n), \
225 struct BOOST_PP_CAT(iter_512_b,n) { }; \
226 ) \
227 /* */
228
229 TEST_ITER_B(BOOST_PP_ITERATION())
230
231 # undef TEST_ITER_B
232
233 # elif BOOST_PP_ITERATION_DEPTH() == 1 \
234 && BOOST_PP_ITERATION_FLAGS() == 0x0005
235
236 #define TEST_ITER_FA(n) \
237 BOOST_PP_EXPR_IIF \
238 ( \
239 ITER100SA(n), \
240 struct BOOST_PP_CAT(iter_1024_f,n) {}; \
241 ) \
242 /* */
243
244 TEST_ITER_FA(BOOST_PP_ITERATION())
245
246 # undef TEST_ITER_FA
247
248 # elif BOOST_PP_ITERATION_DEPTH() == 1 \
249 && BOOST_PP_ITERATION_FLAGS() == 0x0006
250
251 #define TEST_ITER_BA(n) \
252 BOOST_PP_EXPR_IIF \
253 ( \
254 ITER50SA(n), \
255 struct BOOST_PP_CAT(iter_1024_b,n) {}; \
256 ) \
257 /* */
258
259 TEST_ITER_BA(BOOST_PP_ITERATION())
260
261 # undef TEST_ITER_BA
262
263 # elif BOOST_PP_ITERATION_DEPTH() == 2 \
264 && BOOST_PP_FRAME_FLAGS(1) == 0x0002
265
266 struct BOOST_PP_CAT(Z, BOOST_PP_CAT(BOOST_PP_ITERATION(), BOOST_PP_RELATIVE_ITERATION(1))) { };
267
268 # else
269 #
270 # error should not get here!
271 #
272 # endif
273 # endif
274