2002-01-31 15:36:01 +00:00
|
|
|
<HTML><HEAD><TITLE>Boost PREPROCESSOR library</TITLE><BODY bgcolor="#FFFFFF">
|
|
|
|
|
|
|
|
<a href="index.htm"><IMG height=86 alt="c++boost.gif (8819 bytes)" src="../../../../c++boost.gif" width=277 align=center></a>
|
|
|
|
|
|
|
|
<hr>
|
|
|
|
|
|
|
|
<H1>#include <<a href="../../../../boost/preprocessor/while.hpp">boost/preprocessor/while.hpp</a>></H1>
|
|
|
|
|
|
|
|
<hr>
|
|
|
|
|
|
|
|
<H2><a name="BOOST_PP_WHILE">#define BOOST_PP_WHILE</a>(C,F,X)</H2>
|
|
|
|
<P>Iterates F(D,X) while C(D,X) is true.</P>
|
|
|
|
|
|
|
|
<P>In other words, expands to:</P>
|
|
|
|
|
|
|
|
<PRE>
|
|
|
|
F(D, ... F(D, F(D,X) ) ... )
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
<P>The depth of iteration is determined by C(D,X).</P>
|
|
|
|
|
|
|
|
<H3>Legend</H3>
|
|
|
|
<UL>
|
|
|
|
<LI><B>X</B> is the current state of iteration. The state is usually a tuple.
|
|
|
|
<LI><B>C</B> is the condition for iteration. It must expand to a decimal
|
|
|
|
integer literal.
|
|
|
|
<LI><B>F</B> is the iterated macro. Note that if the state is a tuple, then
|
|
|
|
F(D,X) usually expands to a tuple of the same number of elements.
|
|
|
|
<LI><B>D</B> is the recursion depth and should only be used as a parameter
|
|
|
|
to other macros using <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>(). Such macros include
|
|
|
|
<a href="arithmetic_add.htm#BOOST_PP_ADD">BOOST_PP_ADD</a>() and other arithmetic operations. For each macro using
|
|
|
|
<a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>(), there is a version of the macro, distinguished by the
|
|
|
|
D suffix (e.g. BOOST_PP_ADD_D()), that accepts an additional recursion
|
|
|
|
depth as the first parameter. This technique is necessary to avoid
|
|
|
|
recursively expanding the same macro again, which is not permitted by the
|
2002-01-31 21:52:46 +00:00
|
|
|
C++ preprocessor. Note that the value of the D parameter may exceed
|
|
|
|
<a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>.
|
2002-01-31 15:36:01 +00:00
|
|
|
</UL>
|
|
|
|
|
2002-01-31 21:52:46 +00:00
|
|
|
<H3>Note</H3>
|
2002-01-31 15:36:01 +00:00
|
|
|
|
|
|
|
<P>Using <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() is a bit tricky. This is due to the C++ preprocessor
|
|
|
|
limitations. It is recommended to take a look at the implementations of the
|
2002-01-31 21:52:46 +00:00
|
|
|
various PREPROCESSOR library primitives such as <a href="arithmetic_add.htm#BOOST_PP_ADD">BOOST_PP_ADD</a>() for
|
|
|
|
additional examples.</P>
|
2002-01-31 15:36:01 +00:00
|
|
|
|
|
|
|
<H3>Example</H3>
|
|
|
|
<UL>
|
|
|
|
<LI><a href="../../example/count_down.c">count_down.c</a>
|
2002-01-31 21:52:46 +00:00
|
|
|
<LI><a hreF="../../example/linear_fib.c">linear_fib.c</a>
|
2002-01-31 15:36:01 +00:00
|
|
|
</UL>
|
|
|
|
|
|
|
|
<H3>Implementation rationale</H3>
|
|
|
|
<UL>
|
|
|
|
<LI>The maximum iteration depth is greater than 2*<a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a> to make
|
|
|
|
it possible to compute N*N functions.
|
|
|
|
</UL>
|
|
|
|
|
|
|
|
<hr>
|
|
|
|
|
|
|
|
<p>(C) Copyright Housemarque Oy 2002</p>
|
|
|
|
|
|
|
|
<p>Permission to copy, use, modify, sell and distribute this document is granted
|
|
|
|
provided this copyright notice appears in all copies. This document is provided
|
|
|
|
"as is" without express or implied warranty, and with no claim as to its suitability
|
|
|
|
for any purpose.</p>
|
|
|
|
|
|
|
|
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>
|
|
|
|
|
|
|
|
</BODY></HTML>
|