1 | #include <boost/foreach.hpp>
|
---|
2 | #include <boost/fusion/include/at_c.hpp>
|
---|
3 | #include <boost/fusion/include/std_pair.hpp>
|
---|
4 | #include <boost/preprocessor/seq/for_each_i.hpp>
|
---|
5 |
|
---|
6 | #define BOOST_FOREACH_ASSIGN_VAR(R, ROW, I, VAR) \
|
---|
7 | for (VAR = boost::fusion::at_c<I>(ROW); !BOOST_FOREACH_ID(_foreach_leave_outerloop); \
|
---|
8 | BOOST_FOREACH_ID(_foreach_leave_outerloop) = true)
|
---|
9 |
|
---|
10 | #define BOOST_FOREACH_FIELD(VARS, COL) \
|
---|
11 | BOOST_FOREACH_PREAMBLE() \
|
---|
12 | if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_col) = BOOST_FOREACH_CONTAIN(COL)) {} else \
|
---|
13 | if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_cur) = BOOST_FOREACH_BEGIN(COL)) {} else \
|
---|
14 | if (boost::foreach_detail_::auto_any_t BOOST_FOREACH_ID(_foreach_end) = BOOST_FOREACH_END(COL)) {} else \
|
---|
15 | for (bool BOOST_FOREACH_ID(_foreach_continue) = true, \
|
---|
16 | BOOST_FOREACH_ID(_foreach_leave_outerloop) = true; \
|
---|
17 | BOOST_FOREACH_ID(_foreach_continue) && !BOOST_FOREACH_DONE(COL); \
|
---|
18 | BOOST_FOREACH_ID(_foreach_continue) ? BOOST_FOREACH_NEXT(COL) : (void)0) \
|
---|
19 | if (boost::foreach_detail_::set_false(BOOST_FOREACH_ID(_foreach_continue))) {} else \
|
---|
20 | if (boost::foreach_detail_::set_false(BOOST_FOREACH_ID(_foreach_leave_outerloop))) {} else \
|
---|
21 | BOOST_PP_SEQ_FOR_EACH_I(BOOST_FOREACH_ASSIGN_VAR, BOOST_FOREACH_DEREF(COL), VARS) \
|
---|
22 | for (; !BOOST_FOREACH_ID(_foreach_continue); BOOST_FOREACH_ID(_foreach_continue) = true)
|
---|
23 |
|
---|