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