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