Added list data structure

[SVN r12433]
This commit is contained in:
Vesa Karvonen
2002-01-22 10:29:42 +00:00
parent 0206bbaa60
commit 178a8ab429
30 changed files with 1406 additions and 25 deletions

View File

@ -55,7 +55,59 @@ In other words, expands to the sequence:
M(0,P) M(1,P) ... M(N-1,P)
</pre></div></pre>
<p>
See BOOST_PP_LIMIT_MAG. </td>
See BOOST_PP_LIMIT_MAG.
<p>
<h3>2D and 3D repetition</h3>
<p>
2D and 3D repetition are supported with the <a class="el" href="repeat__2nd_8hpp.html#a0">BOOST_PP_REPEAT_2ND</a>() and <a class="el" href="repeat__3rd_8hpp.html#a0">BOOST_PP_REPEAT_3RD</a>() macros. For example,
<p>
<pre><div class="fragment"><pre>
// A generalized macro for generating 2D arrays
#define ARRAY_2D(W,H,M,P)\
BOOST_PP_REPEAT_2ND\
( H\
, ARRAY_2D_ROW\
, (W,H,M,P)\
)
#define ARRAY_2D_ROW(Y,WHMP)\
BOOST_PP_EXPAND\
( BOOST_PP_REPEAT\
( BOOST_PP_TUPLE_ELEM(4,0,WHMP)\
, ARRAY_2D_ELEM\
, (Y,BOOST_PP_TUPLE4_ENUM WHMP)\
)\
)
#define BOOST_PP_TUPLE4_ENUM(A,B,C,D) A,B,C,D
#define ARRAY_2D_ELEM(X,YWHMP)\
BOOST_PP_TUPLE_ELEM(5,3,YWHMP)\
BOOST_PP_EXPAND\
( ( X\
, BOOST_PP_TUPLE_ELEM(5,0,YWHMP)\
, BOOST_PP_TUPLE_ELEM(5,1,YWHMP)\
, BOOST_PP_TUPLE_ELEM(5,2,YWHMP)\
, BOOST_PP_TUPLE_ELEM(5,4,YWHMP)\
)\
)
// Here we use the above macro to generate something
#define ELEM(X,Y,W,H,E) BOOST_PP_COMMA_IF(BOOST_PP_OR(X,Y)) E##_##X##_##Y
ARRAY_2D(3,4,ELEM,elem)
</pre></div></pre>
<p>
expands to:
<p>
<pre><div class="fragment"><pre>
elem_0_0, elem_1_0, elem_2_0,
elem_0_1, elem_1_1, elem_2_1,
elem_0_2, elem_1_2, elem_2_2,
elem_0_3, elem_1_3, elem_2_3
</pre></div></pre>
<p>
Since recursive expansion of macros is not allowed by the C++ preprocessor, replacing the BOOST_PP_REPEAT_2ND above with BOOST_PP_REPEAT, would not produce the above expansion.
<p>
See <a class="el" href="for_8hpp.html#a0">BOOST_PP_FOR</a>(). </td>
</tr>
</table>
<a name="a1" doxytag="repeat.hpp::BOOST_PREPROCESSOR_REPEAT"></a><p>