1 /*==============================================================================
2     Copyright (c) 2010 Thomas Heller
3 
4     Distributed under the Boost Software License, Version 1.0. (See accompanying
5     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 
8 #if !BOOST_PP_IS_ITERATING
9 
10 #include <boost/preprocessor/tuple/elem.hpp>
11 
12 #ifndef BOOST_PHOENIX_ITERATION_PARAMS
13 #error "BOOST_PHOENIX_ITERATION_PARAMS not defined"
14 #endif
15 
16 #define BOOST_PHOENIX_ITERATION_PARAMS_SIZE                                     \
17     BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PHOENIX_ITERATION_PARAMS)                   \
18 /**/
19 
20 #define BOOST_PHOENIX_ITERATION_TUPLE                                           \
21     BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PHOENIX_ITERATION_PARAMS)                   \
22 /**/
23 
24 #define BOOST_PHOENIX_ITERATION_START                                           \
25     BOOST_PP_TUPLE_ELEM(                                                        \
26         BOOST_PHOENIX_ITERATION_PARAMS_SIZE, 0, BOOST_PHOENIX_ITERATION_TUPLE)  \
27 /**/
28 
29 #define BOOST_PHOENIX_ITERATION_END                                             \
30     BOOST_PP_TUPLE_ELEM(                                                        \
31         BOOST_PHOENIX_ITERATION_PARAMS_SIZE, 1, BOOST_PHOENIX_ITERATION_TUPLE)  \
32 /**/
33 
34 
35 #define BOOST_PHOENIX_ITERATION_FILE()                                          \
36     BOOST_PP_TUPLE_ELEM(                                                        \
37         BOOST_PHOENIX_ITERATION_PARAMS_SIZE, 2, BOOST_PHOENIX_ITERATION_TUPLE)  \
38 /**/
39 
40 #if BOOST_PHOENIX_ITERATION_PARAMS_SIZE == 3
41 
42 #define BOOST_PP_ITERATION_PARAMS_1                                             \
43     (3, (BOOST_PHOENIX_ITERATION_START, BOOST_PHOENIX_ITERATION_END,            \
44     <boost/phoenix/support/detail/iterate.hpp>))                                \
45 /**/
46 
47 #else
48 
49 #define BOOST_PHOENIX_ITERATION_FLAG                                            \
50     BOOST_PP_TUPLE_ELEM(                                                        \
51         BOOST_PHOENIX_ITERATION_PARAMS_SIZE, 3, BOOST_PHOENIX_ITERATION_TUPLE)  \
52 /**/
53 
54 #define BOOST_PP_ITERATION_PARAMS_1                                             \
55     (4, (BOOST_PHOENIX_ITERATION_START, BOOST_PHOENIX_ITERATION_END,            \
56     <boost/phoenix/support/detail/iterate.hpp>,                                 \
57     BOOST_PHOENIX_ITERATION_FLAG))                                              \
58 /**/
59 
60 #endif
61 
62 #include BOOST_PP_ITERATE()
63 
64 #undef BOOST_PHOENIX_ITERATION_PARAMS_SIZE
65 #undef BOOST_PHOENIX_ITERATION_TUPLE
66 #undef BOOST_PHOENIX_ITERATION_START
67 #undef BOOST_PHOENIX_ITERATION_END
68 #undef BOOST_PHOENIX_ITERATION_PARAMS
69 
70 #else
71 
72 #undef BOOST_PHOENIX_IS_ITERATING
73 #define BOOST_PHOENIX_IS_ITERATING 1
74 
75 #include <boost/phoenix/support/detail/iterate_undef.hpp>
76 #include <boost/phoenix/support/detail/iterate_define.hpp>
77 
78 
79 #include BOOST_PHOENIX_ITERATION_FILE()
80 
81 #undef BOOST_PHOENIX_ITERATION
82 
83 #undef BOOST_PHOENIX_IS_ITERATING
84 #define BOOST_PHOENIX_IS_ITERATING 0
85 
86 #include <boost/phoenix/support/detail/iterate_undef.hpp>
87 #include <boost/phoenix/support/detail/iterate_define.hpp>
88 
89 #endif
90