3 <title>BOOST_PP_FOR
</title>
4 <link rel=
"stylesheet" type=
"text/css" href=
"../styles.css">
7 <div style=
"margin-left: 0px;">
8 The
<b>BOOST_PP_FOR
</b> macro represents a generalized horizontal repetition construct.
12 <b>BOOST_PP_FOR
</b>(
<i>state
</i>,
<i>pred
</i>,
<i>op
</i>,
<i>macro
</i>)
22 A binary predicate of the form
<i>pred
</i>(
<i>r
</i>,
<i>state
</i>).
23 This macro must expand to an integer in the range of
<i>0</i> to
<b>BOOST_PP_LIMIT_MAG
</b>.
24 <b>BOOST_PP_FOR
</b> repeatedly expands
<i>macro
</i> while this predicate returns non-zero.
25 This macro is called with the next available
<b>BOOST_PP_FOR
</b> repetition and the current
<i>state
</i>.
29 A binary operation of the form
<i>op
</i>(
<i>r
</i>,
<i>state
</i>).
30 This operation is expanded by
<b>BOOST_PP_FOR
</b> with the next available
<b>BOOST_PP_FOR
</b> repetition and the current
<i>state
</i>.
31 This macro is repeatedly applied to the
<i>state
</i>, each time producing a new
<i>state
</i>, until
<i>pred
</i> returns
<i>0</i>.
35 A binary macro of the form
<i>macro
</i>(
<i>r
</i>,
<i>state
</i>).
36 This macro is expanded by
<b>BOOST_PP_FOR
</b> with the next available
<b>BOOST_PP_FOR
</b> repetition and the current
<i>state
</i>.
37 This macro is is repeated by
<b>BOOST_PP_FOR
</b> until
<i>pred
</i> returns
<i>0</i>.
42 This macro expands to the sequence:
44 <i>macro
</i>(
<i>r
</i>,
<i>state
</i>)
<i>macro
</i>(
<i>r
</i>,
<i>op
</i>(
<i>r
</i>,
<i>state
</i>)) ...
<i>macro
</i>(
<i>r
</i>,
<i>op
</i>(
<i>r
</i>, ...
<i>op
</i>(
<i>r
</i>,
<i>state
</i>) ... ))
48 The
<i>r
</i> value that is passed to
<i>pred
</i>,
<i>op
</i>, and
<i>macro
</i> represents the next available
<b>BOOST_PP_FOR
</b> repetition.
49 Other macros that have
<b>_R
</b> suffix variants internally use
<b>BOOST_PP_FOR
</b>--for example,
<b>BOOST_PP_LIST_FOR_EACH
</b> and
<b>BOOST_PP_LIST_FOR_EACH_R
</b>.
50 Using these
<b>_R
</b> versions is not strictly necessary, but passing the
<i>r
</i> value (that is passed to
<i>pred
</i>,
<i>op
</i>, and
<i>macro
</i>) to these macros allows them to reenter
<b>BOOST_PP_FOR
</b> with maximum efficiency.
53 To directly use this
<i>r
</i> value, rather than simply passing it to another macro, see
<b>BOOST_PP_FOR_
<i>r
</i></b>.
56 Previously, this macro could not be used recursively inside
<b>BOOST_PP_FOR
</b>.
57 This limitation no longer exists, as the library can automatically detect the next available
<b>BOOST_PP_FOR
</b> repetition.
61 <li><a href=
"for_r.html">BOOST_PP_FOR_
<i>r
</i></a></li>
62 <li><a href=
"limit_mag.html">BOOST_PP_LIMIT_MAG
</a></li>
66 <b>Header:
</b> <a href=
"../headers/repetition/for.html"><boost/preprocessor/repetition/for.hpp
></a>
70 #include
<<a href=
"../headers/arithmetic/inc.html">boost/preprocessor/arithmetic/inc.hpp
</a>>
71 #include
<<a href=
"../headers/comparison/not_equal.html">boost/preprocessor/comparison/not_equal.hpp
</a>>
72 #include
<<a href=
"../headers/repetition/for.html">boost/preprocessor/repetition/for.hpp
</a>>
73 #include
<<a href=
"../headers/tuple/elem.html">boost/preprocessor/tuple/elem.hpp
</a>>
75 #define PRED(r, state) \
76 <a href=
"not_equal.html">BOOST_PP_NOT_EQUAL
</a>( \
77 <a href=
"tuple_elem.html">BOOST_PP_TUPLE_ELEM
</a>(
2,
0, state), \
78 <a href=
"inc.html">BOOST_PP_INC
</a>(
<a href=
"tuple_elem.html">BOOST_PP_TUPLE_ELEM
</a>(
2,
1, state)) \
82 #define OP(r, state) \
84 <a href=
"inc.html">BOOST_PP_INC
</a>(
<a href=
"tuple_elem.html">BOOST_PP_TUPLE_ELEM
</a>(
2,
0, state)), \
85 <a href=
"tuple_elem.html">BOOST_PP_TUPLE_ELEM
</a>(
2,
1, state) \
89 #define MACRO(r, state)
<a href=
"tuple_elem.html">BOOST_PP_TUPLE_ELEM
</a>(
2,
0, state)
91 <a href=
"for.html">BOOST_PP_FOR
</a>((
5,
10), PRED, OP, MACRO) // expands to
5 6 7 8 9 10
94 <div style=
"margin-left: 0px;">
95 <i>© Copyright
<a href=
"http://www.housemarque.com" target=
"_top">Housemarque Oy
</a> 2002</i>
96 </br><i>© Copyright Paul Mensonides
2002</i>
98 <div style=
"margin-left: 0px;">
99 <p><small>Distributed under the Boost Software License, Version
1.0. (See
100 accompanying file
<a href=
"../../../../LICENSE_1_0.txt">LICENSE_1_0.txt
</a> or
102 "http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt
</a>)
</small></p>