forked from boostorg/preprocessor
Automatic recursion
[SVN r14100]
This commit is contained in:
@ -25,6 +25,8 @@
|
||||
<p>Thanks to everyone who participated in the review: David Abrahams, Beman Dawes,
|
||||
Ronald Garcia, Douglas Gregor, Aleksey Gurtovoy, Jeremy Siek, and Daryle Walker.</p>
|
||||
<p>Thanks to Chris Little and Mat Marcus for providing help with MWCW.</p>
|
||||
<p>The original automatic recursion technique, which makes many of the library
|
||||
primitives easier to use, was invented by Paul Mensonides.</p>
|
||||
<p>The PREPROCESSOR library has been developed by Vesa Karvonen. </p>
|
||||
<hr>
|
||||
<p>Revised
|
||||
|
@ -21,56 +21,56 @@
|
||||
<hr>
|
||||
|
||||
<table>
|
||||
<tr><td><a href="../example/array_arithmetic.c">array_arithmetic.c</a></td><td>This example implements over 2200 functions for 1-dimensional arithmetic
|
||||
<tr><td><a href="../example/array_arithmetic.c">array_arithmetic.c</a></td><td>Implements over 2200 functions for 1-dimensional arithmetic
|
||||
array manipulation in C. The idea is to use preprocessor data structures,
|
||||
lists and tuples, for storing metainformation to be used for generating
|
||||
the actual C code.</td></tr>
|
||||
<tr>
|
||||
<td><a href="../example/catch_builtin.cpp">catch_builtin.cpp</a></td>
|
||||
<td>This example demonstrates the usage of lists and BOOST_PP_LIST_FOR_EACH().</td>
|
||||
<td>Demonstrates the usage of lists and BOOST_PP_LIST_FOR_EACH().</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../example/count_down.c">count_down.c</a></td>
|
||||
<td> This is a trivial example of using BOOST_PP_WHILE() that simply counts
|
||||
<td> Trivial example of using BOOST_PP_WHILE() that simply counts
|
||||
down from N to 0 ultimately expanding to a 0.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../example/delay.c">delay.c</a></td>
|
||||
<td>This example implements a macro whose expansion takes exponential amount
|
||||
<td>Implements a macro whose expansion takes exponential amount
|
||||
of time.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../example/duffs_device.c">duffs_device.c</a></td>
|
||||
<td>This example uses the preprocessor library to implement a generalized
|
||||
<td>Uses the preprocessor library to implement a generalized
|
||||
macro for implementing a Duff's Device.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../example/is_integral.cpp">is_integral.cpp</a></td>
|
||||
<td>This example demonstrates the usage of preprocessor lists for generating
|
||||
<td>Demonstrates the usage of preprocessor lists for generating
|
||||
C++ code.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../example/linear_fib.c">linear_fib.c</a></td>
|
||||
<td>This example shows how BOOST_PP_WHILE() can be used for implementing macros.</td>
|
||||
<td>Shows how BOOST_PP_WHILE() can be used for implementing macros.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../example/note.c">note.c</a></td>
|
||||
<td>This example shows how BOOST_PP_STRINGIZE() can be used to allow macro
|
||||
<td>Shows how BOOST_PP_STRINGIZE() can be used to allow macro
|
||||
expansion before stringization.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../example/repeat_2d.c">repeat_2d.c</a></td>
|
||||
<td>This example implements a generalized macro for 2D repetition using the
|
||||
<td>Implements a generalized macro for 2D repetition using the
|
||||
simple repetition primitives of the preprocessor library.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../example/static_assert.c">static_assert.c</a></td>
|
||||
<td>This example shows how BOOST_PP_CAT() can be used to allow macro expansion
|
||||
<td>Shows how BOOST_PP_CAT() can be used to allow macro expansion
|
||||
before token concatenation.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../example/subscript_layer.cpp">subscript_layer.cpp</a></td>
|
||||
<td>This example shows how BOOST_PP_EMPTY can be used as an unused or empty
|
||||
<td>Shows how BOOST_PP_EMPTY can be used as an unused or empty
|
||||
parameter.</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -51,12 +51,8 @@ BOOST_PP_LIST_FIRST_N
|
||||
BOOST_PP_LIST_FIRST_N_D
|
||||
BOOST_PP_LIST_FOLD_LEFT
|
||||
BOOST_PP_LIST_FOLD_LEFT_D
|
||||
BOOST_PP_LIST_FOLD_LEFT_2ND
|
||||
BOOST_PP_LIST_FOLD_LEFT_2ND_D
|
||||
BOOST_PP_LIST_FOLD_RIGHT
|
||||
BOOST_PP_LIST_FOLD_RIGHT_D
|
||||
BOOST_PP_LIST_FOLD_RIGHT_2ND
|
||||
BOOST_PP_LIST_FOLD_RIGHT_2ND_D
|
||||
BOOST_PP_LIST_FOR_EACH
|
||||
BOOST_PP_LIST_FOR_EACH_I
|
||||
BOOST_PP_LIST_FOR_EACH_I_R
|
||||
@ -91,11 +87,7 @@ BOOST_PP_NOT_EQUAL
|
||||
BOOST_PP_NOT_EQUAL_D
|
||||
BOOST_PP_OR
|
||||
BOOST_PP_REPEAT
|
||||
BOOST_PP_REPEAT_2ND
|
||||
BOOST_PP_REPEAT_3RD
|
||||
BOOST_PP_REPEAT_FROM_TO
|
||||
BOOST_PP_REPEAT_FROM_TO_2ND
|
||||
BOOST_PP_REPEAT_FROM_TO_3RD
|
||||
BOOST_PP_STRINGIZE
|
||||
BOOST_PP_SUB
|
||||
BOOST_PP_SUB_D
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<p>For example, <code><a href="arithmetic_add.htm#BOOST_PP_ADD">BOOST_PP_ADD</a>(4,3)</code> expands to <code>7</code> (a
|
||||
single token).</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ single token).</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_ADD_D">#define BOOST_PP_ADD_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="arithmetic.htm">Prev</a> <a href="arithmetic_div.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<p>For example, <code><a href="arithmetic_div.htm#BOOST_PP_DIV">BOOST_PP_DIV</a>(4,3)</code> expands to <code>1</code> (a
|
||||
single token).</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ single token).</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_DIV_D">#define BOOST_PP_DIV_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="arithmetic_add.htm">Prev</a> <a href="arithmetic_mod.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<p>For example, <code><a href="arithmetic_mod.htm#BOOST_PP_MOD">BOOST_PP_MOD</a>(4,3)</code> expands to <code>1</code> (a
|
||||
single token).</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ single token).</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_MOD_D">#define BOOST_PP_MOD_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="arithmetic_div.htm">Prev</a> <a href="arithmetic_mul.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<p>For example, <code><a href="arithmetic_mul.htm#BOOST_PP_MUL">BOOST_PP_MUL</a>(4,3)</code> expands to <code>12</code> (a
|
||||
single token).</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ single token).</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_MUL_D">#define BOOST_PP_MUL_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="arithmetic_mod.htm">Prev</a> <a href="arithmetic_sub.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<p>For example, <code><a href="arithmetic_sub.htm#BOOST_PP_SUB">BOOST_PP_SUB</a>(4,3)</code> expands to <code>1</code> (a
|
||||
single token).</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ single token).</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_SUB_D">#define BOOST_PP_SUB_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="arithmetic_mul.htm">Prev</a> <a href="assert_msg.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
|
||||
<p>For example, <code><a href="comparison_equal.htm#BOOST_PP_EQUAL">BOOST_PP_EQUAL</a>(4,4)</code> expands to <code>1</code>.</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_EQUAL_D">#define BOOST_PP_EQUAL_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="comparison.htm">Prev</a> <a href="comparison_greater.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
|
||||
<p>For example, <code><a href="comparison_greater.htm#BOOST_PP_GREATER">BOOST_PP_GREATER</a>(4,3)</code> expands to <code>1</code>.</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_GREATER_D">#define BOOST_PP_GREATER_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="comparison_equal.htm">Prev</a> <a href="comparison_greater_equal.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
|
||||
<p>For example, <code><a href="comparison_greater_equal.htm#BOOST_PP_GREATER_EQUAL">BOOST_PP_GREATER_EQUAL</a>(1,3)</code> expands to <code>0</code>.</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_GREATER_EQUAL_D">#define BOOST_PP_GREATER_EQUAL_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="comparison_greater.htm">Prev</a> <a href="comparison_less.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
|
||||
<p>For example, <code><a href="comparison_less.htm#BOOST_PP_LESS">BOOST_PP_LESS</a>(2,6)</code> expands to <code>1</code>.</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LESS_D">#define BOOST_PP_LESS_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="comparison_greater_equal.htm">Prev</a> <a href="comparison_less_equal.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
|
||||
<p>For example, <code><a href="comparison_less_equal.htm#BOOST_PP_LESS_EQUAL">BOOST_PP_LESS_EQUAL</a>(7,5)</code> expands to <code>0</code>.</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LESS_EQUAL_D">#define BOOST_PP_LESS_EQUAL_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="comparison_less.htm">Prev</a> <a href="comparison_not_equal.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
|
||||
<p>For example, <code><a href="comparison_not_equal.htm#BOOST_PP_NOT_EQUAL">BOOST_PP_NOT_EQUAL</a>(4,4)</code> expands to <code>0</code>.</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_NOT_EQUAL_D">#define BOOST_PP_NOT_EQUAL_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="comparison_less_equal.htm">Prev</a> <a href="dec.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -47,9 +47,16 @@ MACRO(0,DATA), MACRO(1,DATA), ..., MACRO(<a href="dec.htm#BOOST_PP_DEC">BOOST_PP
|
||||
X0 x0, X1 x1, X2 x2
|
||||
</pre>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<h3>2D and 3D repetition</h3>
|
||||
|
||||
<p><a href="enum.htm#BOOST_PP_ENUM">BOOST_PP_ENUM</a>() implements automatic recursion. 2D and 3D repetition
|
||||
are directly supported.</p>
|
||||
|
||||
<h3>See</h3>
|
||||
<ul>
|
||||
<li><a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>()</li>
|
||||
<li><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>()</li>
|
||||
<li><a href="limits.htm#BOOST_PP_LIMIT_DIM">BOOST_PP_LIMIT_DIM</a></li>
|
||||
<li><a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
|
@ -84,6 +84,14 @@ still quite useful on its own.</p>
|
||||
<p><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() can be used for multidimensional repetition simply by
|
||||
invoking <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>##R() directly.</p>
|
||||
|
||||
<h3>Automatic recursion?</h3>
|
||||
|
||||
<p><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() currently does not implement automatic recursion. The reason
|
||||
for this is that it would lead to very poor performance. The automatic recursion
|
||||
technique takes O(N) steps just to find out that the Nth recursion should be used.
|
||||
This would dramatically effect the time complexity of macros using automatic
|
||||
recursion.</p>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/for_test.cpp">for_test.cpp</a></li>
|
||||
|
@ -74,12 +74,12 @@
|
||||
<dt><a href="list_first_n.htm#BOOST_PP_LIST_FIRST_N">BOOST_PP_LIST_FIRST_N</a></dt>
|
||||
<dt><a href="list_first_n.htm#BOOST_PP_LIST_FIRST_N_D">BOOST_PP_LIST_FIRST_N_D</a></dt>
|
||||
<dt><a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT">BOOST_PP_LIST_FOLD_LEFT</a></dt>
|
||||
<dt><a href="list_fold_left_2nd.htm#BOOST_PP_LIST_FOLD_LEFT_2ND">BOOST_PP_LIST_FOLD_LEFT_2ND</a></dt>
|
||||
<dt><a href="list_fold_left_2nd.htm#BOOST_PP_LIST_FOLD_LEFT_2ND_D">BOOST_PP_LIST_FOLD_LEFT_2ND_D</a></dt>
|
||||
<dt><a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT_2ND">BOOST_PP_LIST_FOLD_LEFT_2ND</a></dt>
|
||||
<dt><a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT_2ND_D">BOOST_PP_LIST_FOLD_LEFT_2ND_D</a></dt>
|
||||
<dt><a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT_D">BOOST_PP_LIST_FOLD_LEFT_D</a></dt>
|
||||
<dt><a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT">BOOST_PP_LIST_FOLD_RIGHT</a></dt>
|
||||
<dt><a href="list_fold_right_2nd.htm#BOOST_PP_LIST_FOLD_RIGHT_2ND">BOOST_PP_LIST_FOLD_RIGHT_2ND</a></dt>
|
||||
<dt><a href="list_fold_right_2nd.htm#BOOST_PP_LIST_FOLD_RIGHT_2ND_D">BOOST_PP_LIST_FOLD_RIGHT_2ND_D</a></dt>
|
||||
<dt><a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT_2ND">BOOST_PP_LIST_FOLD_RIGHT_2ND</a></dt>
|
||||
<dt><a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT_2ND_D">BOOST_PP_LIST_FOLD_RIGHT_2ND_D</a></dt>
|
||||
<dt><a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT_D">BOOST_PP_LIST_FOLD_RIGHT_D</a></dt>
|
||||
<dt><a href="list_for_each.htm#BOOST_PP_LIST_FOR_EACH">BOOST_PP_LIST_FOR_EACH</a></dt>
|
||||
<dt><a href="list_for_each_i.htm#BOOST_PP_LIST_FOR_EACH_I">BOOST_PP_LIST_FOR_EACH_I</a></dt>
|
||||
@ -115,11 +115,11 @@
|
||||
<dt><a href="comparison_not_equal.htm#BOOST_PP_NOT_EQUAL_D">BOOST_PP_NOT_EQUAL_D</a></dt>
|
||||
<dt><a href="logical_or.htm#BOOST_PP_OR">BOOST_PP_OR</a></dt>
|
||||
<dt><a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a></dt>
|
||||
<dt><a href="repeat_2nd.htm#BOOST_PP_REPEAT_2ND">BOOST_PP_REPEAT_2ND</a></dt>
|
||||
<dt><a href="repeat_3rd.htm#BOOST_PP_REPEAT_3RD">BOOST_PP_REPEAT_3RD</a></dt>
|
||||
<dt><a href="repeat.htm#BOOST_PP_REPEAT_2ND">BOOST_PP_REPEAT_2ND</a></dt>
|
||||
<dt><a href="repeat.htm#BOOST_PP_REPEAT_3RD">BOOST_PP_REPEAT_3RD</a></dt>
|
||||
<dt><a href="repeat_from_to.htm#BOOST_PP_REPEAT_FROM_TO">BOOST_PP_REPEAT_FROM_TO</a></dt>
|
||||
<dt><a href="repeat_from_to_2nd.htm#BOOST_PP_REPEAT_FROM_TO_2ND">BOOST_PP_REPEAT_FROM_TO_2ND</a></dt>
|
||||
<dt><a href="repeat_from_to_3rd.htm#BOOST_PP_REPEAT_FROM_TO_3RD">BOOST_PP_REPEAT_FROM_TO_3RD</a></dt>
|
||||
<dt><a href="repeat_from_to.htm#BOOST_PP_REPEAT_FROM_TO_2ND">BOOST_PP_REPEAT_FROM_TO_2ND</a></dt>
|
||||
<dt><a href="repeat_from_to.htm#BOOST_PP_REPEAT_FROM_TO_3RD">BOOST_PP_REPEAT_FROM_TO_3RD</a></dt>
|
||||
<dt><a href="stringize.htm#BOOST_PP_STRINGIZE">BOOST_PP_STRINGIZE</a></dt>
|
||||
<dt><a href="arithmetic_sub.htm#BOOST_PP_SUB">BOOST_PP_SUB</a></dt>
|
||||
<dt><a href="arithmetic_sub.htm#BOOST_PP_SUB_D">BOOST_PP_SUB_D</a></dt>
|
||||
|
@ -28,8 +28,8 @@
|
||||
<p>Expands to the number of dimensions of repeat supported by the
|
||||
library.</p>
|
||||
|
||||
<p>The repeat macros are named <a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>(), <a href="repeat_2nd.htm#BOOST_PP_REPEAT_2ND">BOOST_PP_REPEAT_2ND</a>(),
|
||||
<a href="repeat_3rd.htm#BOOST_PP_REPEAT_3RD">BOOST_PP_REPEAT_3RD</a>(), ...</p>
|
||||
<p>This concerns the repetition primitives (<a href="enum.htm#BOOST_PP_ENUM">BOOST_PP_ENUM</a>(),
|
||||
<a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>() and <a href="repeat_from_to.htm#BOOST_PP_REPEAT_FROM_TO">BOOST_PP_REPEAT_FROM_TO</a>()).</p>
|
||||
|
||||
<hr>
|
||||
|
||||
@ -37,8 +37,8 @@ library.</p>
|
||||
<p>Expands to the maximum straight numeric literal supported by the
|
||||
library.</p>
|
||||
|
||||
<p>This is also the limit of the repetition primitives (<a href="enum.htm#BOOST_PP_ENUM">BOOST_PP_ENUM</a> family
|
||||
and <a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a> family).</p>
|
||||
<p>This is also the limit of the repetition primitives (<a href="enum.htm#BOOST_PP_ENUM">BOOST_PP_ENUM</a>(),
|
||||
<a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>() and <a href="repeat_from_to.htm#BOOST_PP_REPEAT_FROM_TO">BOOST_PP_REPEAT_FROM_TO</a>()).</p>
|
||||
|
||||
<h3>Note</h3>
|
||||
<ul>
|
||||
|
@ -23,7 +23,19 @@
|
||||
<a href="limits.htm">Prev</a> <a href="list_adt.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
<hr>
|
||||
|
||||
<p>Includes all list headers.</p>
|
||||
<p>Includes all list headers.</p>
|
||||
|
||||
<p>A list is an arbitrary size collection of elements.</p>
|
||||
|
||||
<p>In the preprocessor library, the internal representation of lists
|
||||
uses parts that are like macro parameter lists. Thus an element of a list
|
||||
can be any sequence of tokens that constitutes a single macro parameter.</p>
|
||||
|
||||
<p>Lists are manipulated using both list ADT macros and higher-order macros. For an introduction to manipulation of lists in functional programming, see
|
||||
<a href="../bibliography.htm#[Thompson]">[Thompson]</a>,
|
||||
<a href="../bibliography.htm#[Abelson]">[Abelson]</a> or
|
||||
<a href="../bibliography.htm#[Cousineau]">[Cousineau]</a>.</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<a href="limits.htm">Prev</a> <a href="list_adt.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -58,10 +58,10 @@
|
||||
<p>Both of the above lists contain 5 elements: 1, 2, 3, 4 and 5.</p>
|
||||
|
||||
<p>Longer lists can be built from short lists with <a href="list_append.htm#BOOST_PP_LIST_APPEND_D">BOOST_PP_LIST_APPEND_D</a>()
|
||||
and <a href="list_fold_right_2nd.htm#BOOST_PP_LIST_FOLD_RIGHT_2ND">BOOST_PP_LIST_FOLD_RIGHT_2ND</a>():</p>
|
||||
and <a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT">BOOST_PP_LIST_FOLD_RIGHT</a>():</p>
|
||||
|
||||
<pre>
|
||||
<a href="list_fold_right_2nd.htm#BOOST_PP_LIST_FOLD_RIGHT_2ND">BOOST_PP_LIST_FOLD_RIGHT_2ND</a>
|
||||
<a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT">BOOST_PP_LIST_FOLD_RIGHT</a>
|
||||
( <a href="list_append.htm#BOOST_PP_LIST_APPEND_D">BOOST_PP_LIST_APPEND_D</a>
|
||||
, <a href="tuple_to_list.htm#BOOST_PP_TUPLE_TO_LIST">BOOST_PP_TUPLE_TO_LIST</a>
|
||||
( N
|
||||
@ -70,6 +70,7 @@ and <a href="list_fold_right_2nd.htm#BOOST_PP_LIST_FOLD_RIGHT_2ND">BOOST_PP_LIST
|
||||
, ...
|
||||
, <a href="tuple_to_list.htm#BOOST_PP_TUPLE_TO_LIST">BOOST_PP_TUPLE_TO_LIST</a>(M, (EN1, EN2, ..., ENM) )
|
||||
)
|
||||
, <a href="list_adt.htm#BOOST_PP_LIST_NIL">BOOST_PP_LIST_NIL</a>
|
||||
)
|
||||
</pre>
|
||||
|
||||
|
@ -42,11 +42,6 @@
|
||||
<a href="tuple_to_list.htm#BOOST_PP_TUPLE_TO_LIST">BOOST_PP_TUPLE_TO_LIST</a>(4,(1,2,3,4))
|
||||
</pre>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT">BOOST_PP_LIST_FOLD_RIGHT</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -55,7 +50,7 @@
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_APPEND_D">#define BOOST_PP_LIST_APPEND_D</a>(D,LIST_1ST,LIST_2ND)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_adt.htm">Prev</a> <a href="list_at.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -36,11 +36,6 @@ first element is at index <code>0</code>.</p>
|
||||
|
||||
<p>expands to <code>B</code>.</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -49,7 +44,7 @@ first element is at index <code>0</code>.</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_AT_D">#define BOOST_PP_LIST_AT_D</a>(D,LIST,INDEX)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_append.htm">Prev</a> <a href="list_cat.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -39,11 +39,6 @@
|
||||
123
|
||||
</pre>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT">BOOST_PP_LIST_FOLD_LEFT</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -52,7 +47,7 @@
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_CAT_D">#define BOOST_PP_LIST_CAT_D</a>(D,LIST)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_at.htm">Prev</a> <a href="list_enum.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -47,7 +47,7 @@ A,B,C
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_ENUM_R">#define BOOST_PP_LIST_ENUM_R</a>(R,LIST)</h3>
|
||||
<p>Can be used inside <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>().</p>
|
||||
<p>Can be used inside <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() (see for an explanation of the R parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_cat.htm">Prev</a> <a href="list_filter.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -40,12 +40,6 @@ for which <code>PRED(D,DATA,X)</code> is true.</p>
|
||||
<a href="tuple_to_list.htm#BOOST_PP_TUPLE_TO_LIST">BOOST_PP_TUPLE_TO_LIST</a>(2,(1,3))
|
||||
</pre>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for explanation of the D parameter)</li>
|
||||
<li><a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT">BOOST_PP_LIST_FOLD_RIGHT</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -54,7 +48,7 @@ for which <code>PRED(D,DATA,X)</code> is true.</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FILTER_D">#define BOOST_PP_LIST_FILTER_D</a>(D,PRED,DATA,LIST)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_enum.htm">Prev</a> <a href="list_first_n.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -45,11 +45,6 @@
|
||||
<li><a href="list_rest_n.htm#BOOST_PP_LIST_REST_N">BOOST_PP_LIST_REST_N</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT">BOOST_PP_LIST_FOLD_LEFT</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -58,7 +53,7 @@
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FIRST_N_D">#define BOOST_PP_LIST_FIRST_N_D</a>(D,COUNT,LIST)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_filter.htm">Prev</a> <a href="list_fold_left.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -62,11 +62,6 @@ _ABC
|
||||
<li><a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT">BOOST_PP_LIST_FOLD_RIGHT</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for explanation of the D parameter)</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -75,7 +70,22 @@ _ABC
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOLD_LEFT_D">#define BOOST_PP_LIST_FOLD_LEFT_D</a>(D,OP,STATE,LIST)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
|
||||
<h3>Note</h3>
|
||||
<ul>
|
||||
<li><a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT_D">BOOST_PP_LIST_FOLD_LEFT_D</a>() implements automatic recursion. You
|
||||
can use a fold in the OP macro.</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOLD_LEFT_2ND">#define BOOST_PP_LIST_FOLD_LEFT_2ND</a></h3>
|
||||
<p>Obsolete, just use <a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT">BOOST_PP_LIST_FOLD_LEFT</a>().</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOLD_LEFT_2ND_D">#define BOOST_PP_LIST_FOLD_LEFT_2ND_D</a></h3>
|
||||
<p>Obsolete, just use <a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT_D">BOOST_PP_LIST_FOLD_LEFT_D</a>().</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_first_n.htm">Prev</a> <a href="list_fold_left_2nd.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -21,15 +21,14 @@
|
||||
<hr>
|
||||
|
||||
<a href="list_fold_left.htm">Prev</a> <a href="list_fold_right.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOLD_LEFT_2ND">#define BOOST_PP_LIST_FOLD_LEFT_2ND</a>(OP,STATE,LIST)</h3>
|
||||
<p>Same as <a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT">BOOST_PP_LIST_FOLD_LEFT</a>(), but implemented independently.</p>
|
||||
<hr>
|
||||
<p>This header is obsolete. Use the following code instead.</p>
|
||||
|
||||
<pre>
|
||||
#include <boost/preprocessor/list/fold_left.hpp>
|
||||
</pre>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOLD_LEFT_2ND_D">#define BOOST_PP_LIST_FOLD_LEFT_2ND_D</a>(D,OP,STATE,LIST)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_fold_left.htm">Prev</a> <a href="list_fold_right.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -59,10 +59,10 @@ OP
|
||||
_CBA
|
||||
</pre>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<h3>Note</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for explanation of the D parameter)</li>
|
||||
<li><a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT">BOOST_PP_LIST_FOLD_LEFT</a>()</li>
|
||||
<li>Folding, or accumulation, is a very general pattern of computation.
|
||||
Most list operations can be implemented in terms of folding.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
@ -73,7 +73,22 @@ _CBA
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOLD_RIGHT_D">#define BOOST_PP_LIST_FOLD_RIGHT_D</a>(D,OP,LIST,STATE)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
|
||||
<h3>Note</h3>
|
||||
<ul>
|
||||
<li><a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT_D">BOOST_PP_LIST_FOLD_RIGHT_D</a>() implements automatic recursion. You
|
||||
can use a fold in the OP macro.</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOLD_RIGHT_2ND">#define BOOST_PP_LIST_FOLD_RIGHT_2ND</a></h3>
|
||||
<p>Obsolete, just use <a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT">BOOST_PP_LIST_FOLD_RIGHT</a>().</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOLD_RIGHT_2ND_D">#define BOOST_PP_LIST_FOLD_RIGHT_2ND_D</a></h3>
|
||||
<p>Obsolete, just use <a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT_D">BOOST_PP_LIST_FOLD_RIGHT_D</a>().</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_fold_left_2nd.htm">Prev</a> <a href="list_fold_right_2nd.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -21,15 +21,14 @@
|
||||
<hr>
|
||||
|
||||
<a href="list_fold_right.htm">Prev</a> <a href="list_for_each.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOLD_RIGHT_2ND">#define BOOST_PP_LIST_FOLD_RIGHT_2ND</a>(OP,LIST,STATE)</h3>
|
||||
<p>Same as <a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT">BOOST_PP_LIST_FOLD_RIGHT</a>(), but implemented independently.</p>
|
||||
<hr>
|
||||
<p>This header is obsolete. Use the following code instead.</p>
|
||||
|
||||
<pre>
|
||||
#include <boost/preprocessor/list/fold_right.hpp>
|
||||
</pre>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOLD_RIGHT_2ND_D">#define BOOST_PP_LIST_FOLD_RIGHT_2ND_D</a>(D,OP,LIST,STATE)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_fold_right.htm">Prev</a> <a href="list_for_each.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -55,12 +55,6 @@ prefix_A(); prefix_B(); prefix_C();
|
||||
<li><a href="../../example/catch_builtin.cpp">catch_builtin.cpp</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() (see for explanation of the R parameter)</li>
|
||||
<li><a href="list_for_each_i.htm#BOOST_PP_LIST_FOR_EACH_I">BOOST_PP_LIST_FOR_EACH_I</a>() </li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -69,7 +63,7 @@ prefix_A(); prefix_B(); prefix_C();
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOR_EACH_R">#define BOOST_PP_LIST_FOR_EACH_R</a>(R,MACRO,DATA,LIST)</h3>
|
||||
<p>Can be used inside <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>().</p>
|
||||
<p>Can be used inside <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() (see for an explanation of the R parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_fold_right_2nd.htm">Prev</a> <a href="list_for_each_i.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -50,15 +50,10 @@ MACRO(R,DATA,<a href="dec.htm#BOOST_PP_DEC">BOOST_PP_DEC</a>(<a href="list_size.
|
||||
prefix_A(0); prefix_B(1); prefix_C(2);
|
||||
</pre>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() (see for explanation of the R parameter)</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOR_EACH_I_R">#define BOOST_PP_LIST_FOR_EACH_I_R</a>(R,MACRO,DATA,LIST)</h3>
|
||||
<p>Can be used inside <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>().</p>
|
||||
<p>Can be used inside <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() (see for an explanation of the R parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_for_each.htm">Prev</a> <a href="list_for_each_product.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -56,11 +56,6 @@ explosion.</p>
|
||||
<li><a href="../../example/array_arithmetic.c">array_arithmetic.c</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() (see for explanation of the R parameter)</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -69,7 +64,7 @@ explosion.</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_FOR_EACH_PRODUCT_R">#define BOOST_PP_LIST_FOR_EACH_PRODUCT_R</a>(R,MACRO,SIZE_OF_TUPLE,TUPLE_OF_LISTS)</h3>
|
||||
<p>Can be used inside <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>().</p>
|
||||
<p>Can be used inside <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() (see for an explanation of the R parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_for_each_i.htm">Prev</a> <a href="list_rest_n.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -45,11 +45,6 @@ list <code>LIST</code>.</p>
|
||||
<li><a href="list_first_n.htm#BOOST_PP_LIST_FIRST_N">BOOST_PP_LIST_FIRST_N</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -58,7 +53,7 @@ list <code>LIST</code>.</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_REST_N_D">#define BOOST_PP_LIST_REST_N_D</a>(D,COUNT,LIST)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_for_each_product.htm">Prev</a> <a href="list_reverse.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -39,11 +39,6 @@
|
||||
<a href="tuple_to_list.htm#BOOST_PP_TUPLE_TO_LIST">BOOST_PP_TUPLE_TO_LIST</a>(3,(C,B,A))
|
||||
</pre>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT">BOOST_PP_LIST_FOLD_LEFT</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -52,7 +47,7 @@
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_REVERSE_D">#define BOOST_PP_LIST_REVERSE_D</a>(D,LIST)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_rest_n.htm">Prev</a> <a href="list_size.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -35,11 +35,6 @@
|
||||
|
||||
<p>expands to <code>3</code>.</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="list_fold_left.htm#BOOST_PP_LIST_FOLD_LEFT">BOOST_PP_LIST_FOLD_LEFT</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -48,7 +43,7 @@
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_SIZE_D">#define BOOST_PP_LIST_SIZE_D</a>(D,LIST)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_reverse.htm">Prev</a> <a href="list_to_tuple.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -41,11 +41,6 @@
|
||||
<a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a> rather than <a href="limits.htm#BOOST_PP_LIMIT_TUPLE">BOOST_PP_LIMIT_TUPLE</a>.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -54,7 +49,7 @@
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_TO_TUPLE_R">#define BOOST_PP_LIST_TO_TUPLE_R</a>(R,LIST)</h3>
|
||||
<p>Can be used inside <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>().</p>
|
||||
<p>Can be used inside <a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>() (see for an explanation of the R parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_size.htm">Prev</a> <a href="list_transform.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -50,12 +50,6 @@ of the list producing a new list.</p>
|
||||
<a href="tuple_to_list.htm#BOOST_PP_TUPLE_TO_LIST">BOOST_PP_TUPLE_TO_LIST</a>(2,(3,4))
|
||||
</pre>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for explanation of the D parameter)</li>
|
||||
<li><a href="list_fold_right.htm#BOOST_PP_LIST_FOLD_RIGHT">BOOST_PP_LIST_FOLD_RIGHT</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/list_test.cpp">list_test.cpp</a></li>
|
||||
@ -64,7 +58,7 @@ of the list producing a new list.</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_LIST_TRANSFORM_D">#define BOOST_PP_LIST_TRANSFORM_D</a>(D,OP,DATA,LIST)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="list_to_tuple.htm">Prev</a> <a href="logical.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<p>For example, <code><a href="max.htm#BOOST_PP_MAX">BOOST_PP_MAX</a>(5,7)</code> expands to <code>7</code> (a
|
||||
single token).</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ single token).</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_MAX_D">#define BOOST_PP_MAX_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="logical_xor.htm">Prev</a> <a href="min.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -33,11 +33,6 @@ in the range [0, <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>]
|
||||
<p>For example, <code><a href="min.htm#BOOST_PP_MIN">BOOST_PP_MIN</a>(5,7)</code> expands to <code>5</code> (a
|
||||
single token).</p>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<ul>
|
||||
<li><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>()</li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/arithmetic_test.cpp">arithmetic_test.cpp</a></li>
|
||||
@ -46,7 +41,7 @@ single token).</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_MIN_D">#define BOOST_PP_MIN_D</a>(D,X,Y)</h3>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>().</p>
|
||||
<p>Can be used inside <a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() (see for an explanation of the D parameter).</p>
|
||||
<hr>
|
||||
|
||||
<a href="max.htm">Prev</a> <a href="repeat.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -48,8 +48,8 @@ X(0); X(1); X(2);
|
||||
|
||||
<h3>2D and 3D repetition</h3>
|
||||
|
||||
<p>2D and 3D repetition are supported with the <a href="repeat_2nd.htm#BOOST_PP_REPEAT_2ND">BOOST_PP_REPEAT_2ND</a>() and
|
||||
<a href="repeat_3rd.htm#BOOST_PP_REPEAT_3RD">BOOST_PP_REPEAT_3RD</a>() macros.</p>
|
||||
<p><a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>() implements automatic recursion. 2D and 3D repetition
|
||||
are directly supported.</p>
|
||||
|
||||
<h3>Example</h3>
|
||||
<ul>
|
||||
@ -60,9 +60,24 @@ X(0); X(1); X(2);
|
||||
<h3>See</h3>
|
||||
<ul>
|
||||
<li><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>()</li>
|
||||
<li><a href="limits.htm#BOOST_PP_LIMIT_DIM">BOOST_PP_LIMIT_DIM</a></li>
|
||||
<li><a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/repeat_test.cpp">repeat_test.cpp</a></li>
|
||||
<li><a href="../../test/repeat_2nd_test.cpp">repeat_2nd_test.cpp</a></li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_REPEAT_2ND">#define BOOST_PP_REPEAT_2ND</a></h3>
|
||||
<p>Obsolete, just use <a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>().</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_REPEAT_3RD">#define BOOST_PP_REPEAT_3RD</a></h3>
|
||||
<p>Obsolete, just use <a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>().</p>
|
||||
<hr>
|
||||
|
||||
<a href="min.htm">Prev</a> <a href="repeat_2nd.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -21,16 +21,13 @@
|
||||
<hr>
|
||||
|
||||
<a href="repeat.htm">Prev</a> <a href="repeat_3rd.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_REPEAT_2ND">#define BOOST_PP_REPEAT_2ND</a>(COUNT,MACRO,DATA)</h3>
|
||||
<p>Same as <a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>(), but implemented independently.</p>
|
||||
<p>This header is obsolete. Use the following code instead.</p>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/repeat_2nd_test.cpp">repeat_2nd_test.cpp</a></li>
|
||||
</ul>
|
||||
<pre>
|
||||
#include <boost/preprocessor/repeat.hpp>
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
|
@ -21,11 +21,14 @@
|
||||
<hr>
|
||||
|
||||
<a href="repeat_2nd.htm">Prev</a> <a href="repeat_from_to.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_REPEAT_3RD">#define BOOST_PP_REPEAT_3RD</a>(COUNT,MACRO,DATA)</h3>
|
||||
<p>Same as <a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>(), but implemented independently.</p>
|
||||
<p>This header is obsolete. Use the following code instead.</p>
|
||||
|
||||
<pre>
|
||||
#include <boost/preprocessor/repeat.hpp>
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<a href="repeat_2nd.htm">Prev</a> <a href="repeat_from_to.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -46,18 +46,34 @@ MACRO(FIRST,DATA) MACRO(<a href="inc.htm#BOOST_PP_INC">BOOST_PP_INC</a>(FIRST),D
|
||||
X(4); X(5); X(6);
|
||||
</pre>
|
||||
|
||||
<h3>Uses</h3>
|
||||
<h3>2D and 3D repetition</h3>
|
||||
|
||||
<p><a href="repeat_from_to.htm#BOOST_PP_REPEAT_FROM_TO">BOOST_PP_REPEAT_FROM_TO</a>() implements automatic recursion. 2D and 3D repetition
|
||||
are directly supported.</p>
|
||||
|
||||
<h3>See</h3>
|
||||
<ul>
|
||||
<li><a href="repeat.htm#BOOST_PP_REPEAT">BOOST_PP_REPEAT</a>()</li>
|
||||
<li><a href="for.htm#BOOST_PP_FOR">BOOST_PP_FOR</a>()</li>
|
||||
<li><a href="limits.htm#BOOST_PP_LIMIT_DIM">BOOST_PP_LIMIT_DIM</a></li>
|
||||
<li><a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a></li>
|
||||
</ul>
|
||||
|
||||
<h3>Test</h3>
|
||||
<ul>
|
||||
<li><a href="../../test/repeat_test.cpp">repeat_test.cpp</a></li>
|
||||
<li><a href="../../test/repeat_2nd_test.cpp">repeat_2nd_test.cpp</a></li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_REPEAT_FROM_TO_2ND">#define BOOST_PP_REPEAT_FROM_TO_2ND</a></h3>
|
||||
<p>Obsolete, just use <a href="repeat_from_to.htm#BOOST_PP_REPEAT_FROM_TO">BOOST_PP_REPEAT_FROM_TO</a>().</p>
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_REPEAT_FROM_TO_3RD">#define BOOST_PP_REPEAT_FROM_TO_3RD</a></h3>
|
||||
<p>Obsolete, just use <a href="repeat_from_to.htm#BOOST_PP_REPEAT_FROM_TO">BOOST_PP_REPEAT_FROM_TO</a>().</p>
|
||||
<hr>
|
||||
|
||||
<a href="repeat_3rd.htm">Prev</a> <a href="repeat_from_to_2nd.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
<hr>
|
||||
|
||||
|
@ -21,11 +21,14 @@
|
||||
<hr>
|
||||
|
||||
<a href="repeat_from_to.htm">Prev</a> <a href="repeat_from_to_3rd.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_REPEAT_FROM_TO_2ND">#define BOOST_PP_REPEAT_FROM_TO_2ND</a>(FIRST,LAST,MACRO,DATA)</h3>
|
||||
<p>Same as <a href="repeat_from_to.htm#BOOST_PP_REPEAT_FROM_TO">BOOST_PP_REPEAT_FROM_TO</a>(), but implemented independently.</p>
|
||||
<p>This header is obsolete. Use the following code instead.</p>
|
||||
|
||||
<pre>
|
||||
#include <boost/preprocessor/repeat_from_to.hpp>
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<a href="repeat_from_to.htm">Prev</a> <a href="repeat_from_to_3rd.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -21,11 +21,14 @@
|
||||
<hr>
|
||||
|
||||
<a href="repeat_from_to_2nd.htm">Prev</a> <a href="stringize.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
||||
<hr>
|
||||
|
||||
<h3><a name="BOOST_PP_REPEAT_FROM_TO_3RD">#define BOOST_PP_REPEAT_FROM_TO_3RD</a>(FIRST,LAST,MACRO,DATA)</h3>
|
||||
<p>Same as <a href="repeat_from_to.htm#BOOST_PP_REPEAT_FROM_TO">BOOST_PP_REPEAT_FROM_TO</a>(), but implemented independently.</p>
|
||||
<p>This header is obsolete. Use the following code instead.</p>
|
||||
|
||||
<pre>
|
||||
#include <boost/preprocessor/repeat_from_to.hpp>
|
||||
</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<a href="repeat_from_to_2nd.htm">Prev</a> <a href="stringize.htm">Next</a> <a href="index.htm#Macros">Macros</a> <a href="index.htm#Headers">Headers</a>
|
||||
|
@ -66,13 +66,21 @@ OP(D, ... OP(D, OP(D,STATE) ) ... )
|
||||
C++ preprocessor.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Automatic recursion?</h3>
|
||||
|
||||
<p><a href="while.htm#BOOST_PP_WHILE">BOOST_PP_WHILE</a>() currently does not implement automatic recursion. The reason
|
||||
for this is that it would lead to very poor performance. The automatic recursion
|
||||
technique takes O(N) steps just to find out that the Nth recursion should be used.
|
||||
This would dramatically effect the time complexity of macros using automatic
|
||||
recursion.</p>
|
||||
|
||||
<h3>Note</h3>
|
||||
<ul>
|
||||
<li>The value of the D parameter may exceed <a href="limits.htm#BOOST_PP_LIMIT_MAG">BOOST_PP_LIMIT_MAG</a>.</li>
|
||||
<li>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 various PREPROCESSOR library primitives such as
|
||||
<a href="arithmetic_add.htm#BOOST_PP_ADD">BOOST_PP_ADD</a>() for additional examples.</li>
|
||||
implementations of the various PREPROCESSOR library primitives
|
||||
such as <a href="arithmetic_add.htm#BOOST_PP_ADD">BOOST_PP_ADD</a>() for additional examples.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Example</h3>
|
||||
|
@ -32,7 +32,7 @@
|
||||
<dt><a href="#ENUM_PARAMS">Avoid O(N) repetition on lists in general</a></dt>
|
||||
<dt><a href="#Conditional Define">Use a Conditional Define to enable user configuration of code repetition</a></dt>
|
||||
<dt><a href="#Token Look-Up">Use Token Look-Up Function to eliminate categorical repetition</a></dt>
|
||||
<dt><a href="#2ND_REPEAT">Use BOOST_PP_REPEAT_2ND to avoid O(N*N) repetition</a></dt>
|
||||
<dt><a href="#2ND_REPEAT">Use BOOST_PP_REPEAT to avoid O(N*N) repetition</a></dt>
|
||||
<dt><a href="#IF">Use BOOST_PP_IF to implement special case for the first element</a></dt>
|
||||
<dt><a href="#Arithmetic">Use arithmetic, logical and comparison operations when necessary</a></dt>
|
||||
</dl>
|
||||
@ -69,8 +69,8 @@ yes_type is_function_tester(R (*)(A0, A1, A2));
|
||||
<P>The need for this kind of repetition occurs particularly frequently while implementing
|
||||
generic components or metaprogramming facilities, but the need also manifests
|
||||
itself in many far simpler situations. </P>
|
||||
<h3>Typical solutions</h3>
|
||||
|
||||
<h3>Typical solutions</h3>
|
||||
|
||||
<p>Typically the repetition is done manually. Manual code repetition is highly
|
||||
unproductive, but sometimes more readable to the untrained eye.</p>
|
||||
@ -111,7 +111,7 @@ yes_type is_function_tester(R (*)(A0, A1, A2));
|
||||
template<class R BOOST_PP_COMMA_IF(N) BOOST_PP_ENUM_PARAMS(N, class A)>\
|
||||
yes_type is_function_tester(R (*)(BOOST_PP_ENUM_PARAMS(N,A)));
|
||||
|
||||
BOOST_PP_REPEAT_2ND(BOOST_PP_INC(MAX_IS_FUNCTION_TESTER_PARAMS),IS_FUNCTION_TESTER,_)
|
||||
BOOST_PP_REPEAT(BOOST_PP_INC(MAX_IS_FUNCTION_TESTER_PARAMS),IS_FUNCTION_TESTER,_)
|
||||
#undef IS_FUNCTION_TESTER
|
||||
</pre>
|
||||
|
||||
@ -189,12 +189,12 @@ of the line continuation operators without making the code too unreadable.</P>
|
||||
<P><B>TIP:</B> Use syntax highlighting on preprocessor metaprogramming macro and
|
||||
parameter identifiers such as</P>
|
||||
<ul>
|
||||
<li> BOOST_PP_DEF,</li>
|
||||
<li>BOOST_PP_DEF,</li>
|
||||
<li>BOOST_PP_EMPTY,</li>
|
||||
<li> BOOST_PP_REPEAT,</li>
|
||||
<li> OP,</li>
|
||||
<li> CV,</li>
|
||||
<li> ...</li>
|
||||
<li>BOOST_PP_REPEAT,</li>
|
||||
<li>OP,</li>
|
||||
<li>CV,</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
<p>It can greatly improve readability.</p>
|
||||
<HR>
|
||||
@ -235,12 +235,12 @@ STATIC_ASSERT(sizeof(int) <= sizeof(long));
|
||||
<P><B><a name="ENUM_PARAMS"></a><a href="examples_preprocessed.htm#ENUM_PARAMS">EXAMPLE</a>:</B>
|
||||
Use:</P>
|
||||
<ul>
|
||||
<li> BOOST_PP_ENUM_PARAMS,</li>
|
||||
<li> BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT,</li>
|
||||
<li> BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS,</li>
|
||||
<li> BOOST_PP_ENUM_SHIFTED_PARAMS, or</li>
|
||||
<li>BOOST_PP_ENUM_PARAMS,</li>
|
||||
<li>BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT,</li>
|
||||
<li>BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS,</li>
|
||||
<li>BOOST_PP_ENUM_SHIFTED_PARAMS, or</li>
|
||||
<li>BOOST_PP_REPEAT, and</li>
|
||||
<li> BOOST_PP_COMMA_IF</li>
|
||||
<li>BOOST_PP_COMMA_IF</li>
|
||||
</ul>
|
||||
<p>to avoid O(N) repetition on lists in general</p>
|
||||
|
||||
@ -359,7 +359,7 @@ categorical repetition of operator tokens can not be completely eliminated by
|
||||
using template metaprogramming.</P>
|
||||
<HR>
|
||||
<P><B><a name="2ND_REPEAT"></a><a href="examples_preprocessed.htm#2ND_REPEAT">EXAMPLE</a>:</B>
|
||||
Use BOOST_PP_REPEAT_2ND to avoid O(N*N) repetition</P>
|
||||
Use BOOST_PP_REPEAT to avoid O(N*N) repetition</P>
|
||||
|
||||
<pre>#ifndef MAX_VEC_ARG_CNT
|
||||
#define MAX_VEC_ARG_CNT 8
|
||||
@ -375,7 +375,7 @@ vec( BOOST_PP_REPEAT(I,ARG_FUN,_) )\
|
||||
{ BOOST_PP_REPEAT(I,ASSIGN_FUN,_)\
|
||||
}
|
||||
|
||||
BOOST_PP_REPEAT_2ND
|
||||
BOOST_PP_REPEAT
|
||||
( BOOST_PP_INC(MAX_VEC_ARG_CNT)
|
||||
, DEF_VEC_CTOR_FUN
|
||||
, _
|
||||
@ -388,8 +388,9 @@ BOOST_PP_REPEAT_2ND
|
||||
// ...
|
||||
</pre>
|
||||
|
||||
<P><B>HOW:</B> BOOST_PP_REPEAT_2ND is implemented separately, so it
|
||||
is possible to combine BOOST_PP_REPEAT and BOOST_PP_REPEAT_2ND.</P>
|
||||
<P><B>HOW:</B> BOOST_PP_REPEAT is implemented in a special way to enable
|
||||
automatic recursion.</P>
|
||||
|
||||
<HR>
|
||||
|
||||
<P><a name="IF"></a><a href="examples_preprocessed.htm#IF"><B>EXAMPLE:</B></a> Use BOOST_PP_IF to implement special case for the first element</P>
|
||||
|
Reference in New Issue
Block a user