set -> seq

[SVN r16150]
This commit is contained in:
Paul Mensonides
2002-11-07 23:39:29 +00:00
parent 54bdb38619
commit 5be4c6ee5a
74 changed files with 3787 additions and 2492 deletions

View File

@ -5,11 +5,13 @@
<base target="desc">
</head>
<body>
<h4>Data Types <small><a href="contents.html" target="index">[back]</a></small></h4>
<h4>
Data Types <small><a href="contents.html" target="index">[back]</a></small>
</h4>
<ul>
<li><a href="data/arrays.html">arrays</a></li>
<li><a href="data/lists.html">lists</a></li>
<li><a href="data/sets.html">sets</a></li>
<li><a href="data/sequences.html">sequences</a></li>
<li><a href="data/tuples.html">tuples</a></li>
</ul>
</body>

View File

@ -1,57 +1,64 @@
<html>
<head>
<title>sets.html</title>
<title>seqs.html</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<h4>Sets</h4>
<h4>
Sets
</h4>
<div>
A <i>set</i> is a group of adjacent parenthesized elements.
For example,
A <i>seq</i> is a group of adjacent parenthesized elements. For example,
</div>
<div class="code">
(<i>a</i>)(<i>b</i>)(<i>c</i>)
</div>
<div>
...is a <i>set</i> of <i>3</i> elements--<i>a</i>, <i>b</i>, and <i>c</i>.
...is a <i>seq</i> of <i>3</i> elements--<i>a</i>, <i>b</i>, and <i>c</i>.
</div>
<div>
<i>Sets</i> are data structures that merge the properties of both <i>lists</i> and <i>tuples</i>
with the exception that <i>sets</i> cannot be empty.&nbsp;
Therefore, an "empty" <i>set</i> is considered a special case scenario that must be handled separately in C++.
<i>Sets</i> are data structures that merge the properties of both <i>lists</i> and
<i>tuples</i> with the exception that <i>seqs</i> cannot be empty.&nbsp;
Therefore, an "empty" <i>seq</i> is considered a special case scenario that
must be handled separately in C++.
</div>
<div class="code"><pre>
#define SET (x)(y)(z)
<div class="code">
<pre>
#define SEQ (x)(y)(z)
#define REVERSE(s, state, elem) (elem) state
// append to head ^
BOOST_PP_SET_FOLD_LEFT(REVERSE, BOOST_PP_EMPTY, SET)()
BOOST_PP_SEQ_FOLD_LEFT(REVERSE, BOOST_PP_EMPTY, SEQ)()
// #1 #2
// 1) placeholder for "empty" set
// 1) placeholder for "empty" seq
// 2) remove placeholder
#define SET_B (1)(2)(3)
#define SEQ_B (1)(2)(3)
#define INC(s, state, elem) state (BOOST_PP_INC(elem))
// append to tail ^
BOOST_PP_SET_FOLD_RIGHT(INC, BOOST_PP_SET_NIL, SET)
BOOST_PP_SEQ_FOLD_RIGHT(INC, BOOST_PP_SEQ_NIL, SEQ)
// ^
// special placeholder that will be "eaten"
// by appending to the tail
</pre></div>
<div>
<i>Sets</i> are extremely efficient.&nbsp;
Element access speed approaches random access--even with <i>sets</i> of up to <i>256</i> elements.&nbsp;
This is because element access (among other things) is implemented iteratively rather than recursively.&nbsp;
Therefore, elements can be accessed at extremely high indices even on preprocessors with low maximum expansion depths.
</pre>
</div>
<div>
Elements of a <i>set</i> can be extracted with
<b>BOOST_PP_SET_ELEM</b>.
<i>Sets</i> are extremely efficient.&nbsp; Element access speed approaches
random access--even with <i>seqs</i> of up to <i>256</i> elements.&nbsp; This
is because element access (among other things) is implemented iteratively
rather than recursively.&nbsp; Therefore, elements can be accessed at extremely
high indices even on preprocessors with low maximum expansion depths.
</div>
<h4>Primitives</h4>
<div>
Elements of a <i>seq</i> can be extracted with <b>BOOST_PP_SEQ_ELEM</b>.
</div>
<h4>
Primitives
</h4>
<ul>
<li><a href="../ref/set_elem.html">BOOST_PP_SET_ELEM</a></li>
<li>
<a href="../ref/seq_elem.html">BOOST_PP_SEQ_ELEM</a></li>
</ul>
</body>
</html>

View File

@ -8,194 +8,382 @@
</style>
</head>
<body>
<h4>Headers <small><a href="contents.html" target="index">[back]</a></small></h4>
<h4>
Headers <small><a href="contents.html" target="index">[back]</a></small>
</h4>
<ul>
<li>../</li>
<li class="ps"><a href="headers/preprocessor.hpp.html">preprocessor.hpp</a></li>
<li><a href="headers/arithmetic.hpp.html">arithmetic.hpp</a></li>
<li>arithmetic/</li>
<li class="ps"><a href="headers/arithmetic/add.hpp.html">add.hpp</a></li>
<li class="ps"><a href="headers/arithmetic/dec.hpp.html">dec.hpp</a></li>
<li class="ps"><a href="headers/arithmetic/div.hpp.html">div.hpp</a></li>
<li class="ps"><a href="headers/arithmetic/inc.hpp.html">inc.hpp</a></li>
<li class="ps"><a href="headers/arithmetic/mod.hpp.html">mod.hpp</a></li>
<li class="ps"><a href="headers/arithmetic/mul.hpp.html">mul.hpp</a></li>
<li class="ps"><a href="headers/arithmetic/sub.hpp.html">sub.hpp</a></li>
<li><a href="headers/array.hpp.html">array.hpp</a></li>
<li>array/</li>
<li class="ps"><a href="headers/array/data.hpp.html">data.hpp</a></li>
<li class="ps"><a href="headers/array/elem.hpp.html">elem.hpp</a></li>
<li class="ps"><a href="headers/array/insert.hpp.html">insert.hpp</a></li>
<li class="ps"><a href="headers/array/pop_back.hpp.html">pop_back.hpp</a></li>
<li class="ps"><a href="headers/array/pop_front.hpp.html">pop_front.hpp</a></li>
<li class="ps"><a href="headers/array/push_back.hpp.html">push_back.hpp</a></li>
<li class="ps"><a href="headers/array/push_front.hpp.html">push_front.hpp</a></li>
<li class="ps"><a href="headers/array/remove.hpp.html">remove.hpp</a></li>
<li class="ps"><a href="headers/array/replace.hpp.html">replace.hpp</a></li>
<li class="ps"><a href="headers/array/reverse.hpp.html">reverse.hpp</a></li>
<li class="ps"><a href="headers/array/size.hpp.html">size.hpp</a></li>
<li><a href="headers/assert_msg.hpp.html">assert_msg.hpp*</a></li>
<li><a href="headers/cat.hpp.html">cat.hpp</a></li>
<li><a href="headers/comma.hpp.html">comma.hpp*</a></li>
<li><a href="headers/comma_if.hpp.html">comma_if.hpp*</a></li>
<li><a href="headers/comparison.hpp.html">comparison.hpp</a></li>
<li>comparison/</li>
<li class="ps"><a href="headers/comparison/equal.hpp.html">equal.hpp</a></li>
<li class="ps"><a href="headers/comparison/greater.hpp.html">greater.hpp</a></li>
<li class="ps"><a href="headers/comparison/greater_equal.hpp.html">greater_equal.hpp</a></li>
<li class="ps"><a href="headers/comparison/less.hpp.html">less.hpp</a></li>
<li class="ps"><a href="headers/comparison/less_equal.hpp.html">less_equal.hpp</a></li>
<li class="ps"><a href="headers/comparison/not_equal.hpp.html">not_equal.hpp</a></li>
<li>config/</li>
<li class="ps"><a href="headers/config/limits.hpp.html">limits.hpp</a></li>
<li><a href="headers/control.hpp.html">control.hpp</a></li>
<li>control/</li>
<li class="ps"><a href="headers/control/deduce_d.hpp.html">deduce_d.hpp</a></li>
<li class="ps"><a href="headers/control/expr_if.hpp.html">expr_if.hpp</a></li>
<li class="ps"><a href="headers/control/expr_iif.hpp.html">expr_iif.hpp</a></li>
<li class="ps"><a href="headers/control/if.hpp.html">if.hpp</a></li>
<li class="ps"><a href="headers/control/iif.hpp.html">iif.hpp</a></li>
<li class="ps"><a href="headers/control/while.hpp.html">while.hpp</a></li>
<li><a href="headers/debug.hpp.html">debug.hpp</a></li>
<li>debug/</li>
<li class="ps"><a href="headers/debug/assert.hpp.html">assert.hpp</a></li>
<li class="ps"><a href="headers/debug/line.hpp.html">line.hpp</a></li>
<li><a href="headers/dec.hpp.html">dec.hpp*</a></li>
<li><a href="headers/empty.hpp.html">empty.hpp*</a></li>
<li><a href="headers/enum.hpp.html">enum.hpp*</a></li>
<li><a href="headers/enum_params.hpp.html">enum_params.hpp*</a></li>
<li><a href="headers/enum_params_with_a_default.hpp.html">enum_params_with_a_default.hpp*</a></li>
<li><a href="headers/enum_params_with_defaults.hpp.html">enum_params_with_defaults.hpp*</a></li>
<li><a href="headers/enum_shifted.hpp.html">enum_shifted.hpp*</a></li>
<li><a href="headers/enum_shifted_params.hpp.html">enum_shifted_params.hpp*</a></li>
<li><a href="headers/expand.hpp.html">expand.hpp*</a></li>
<li><a href="headers/expr_if.hpp.html">expr_if.hpp*</a></li>
<li><a href="headers/facilities.hpp.html">facilities.hpp</a></li>
<li>facilities/</li>
<li class="ps"><a href="headers/facilities/apply.hpp.html">apply.hpp</a></li>
<li class="ps"><a href="headers/facilities/empty.hpp.html">empty.hpp</a></li>
<li class="ps"><a href="headers/facilities/expand.hpp.html">expand.hpp</a></li>
<li class="ps"><a href="headers/facilities/identity.hpp.html">identity.hpp</a></li>
<li class="ps"><a href="headers/facilities/intercept.hpp.html">intercept.hpp</a></li>
<li><a href="headers/for.hpp.html">for.hpp*</a></li>
<li><a href="headers/identity.hpp.html">identity.hpp*</a></li>
<li><a href="headers/if.hpp.html">if.hpp*</a></li>
<li><a href="headers/inc.hpp.html">inc.hpp*</a></li>
<li><a href="headers/iterate.hpp.html">iterate.hpp*</a></li>
<li><a href="headers/iteration.hpp.html">iteration.hpp</a></li>
<li>iteration/</li>
<li class="ps"><a href="headers/iteration/iterate.hpp.html">iterate.hpp</a></li>
<li class="ps"><a href="headers/iteration/local.hpp.html">local.hpp</a></li>
<li class="ps"><a href="headers/iteration/self.hpp.html">self.hpp</a></li>
<li><a href="headers/library.hpp.html">library.hpp</a></li>
<li><a href="headers/limits.hpp.html">limits.hpp*</a></li>
<li><a href="headers/list.hpp.html">list.hpp</a></li>
<li>list/</li>
<li class="ps"><a href="headers/list/adt.hpp.html">adt.hpp</a></li>
<li class="ps"><a href="headers/list/append.hpp.html">append.hpp</a></li>
<li class="ps"><a href="headers/list/at.hpp.html">at.hpp</a></li>
<li class="ps"><a href="headers/list/cat.hpp.html">cat.hpp</a></li>
<li class="ps"><a href="headers/list/enum.hpp.html">enum.hpp</a></li>
<li class="ps"><a href="headers/list/filter.hpp.html">filter.hpp</a></li>
<li class="ps"><a href="headers/list/first_n.hpp.html">first_n.hpp</a></li>
<li class="ps"><a href="headers/list/fold_left.hpp.html">fold_left.hpp</a></li>
<li class="ps"><a href="headers/list/fold_right.hpp.html">fold_right.hpp</a></li>
<li class="ps"><a href="headers/list/for_each.hpp.html">for_each.hpp</a></li>
<li class="ps"><a href="headers/list/for_each_i.hpp.html">for_each_i.hpp</a></li>
<li class="ps"><a href="headers/list/for_each_product.hpp.html">for_each_product.hpp</a></li>
<li class="ps"><a href="headers/list/rest_n.hpp.html">rest_n.hpp</a></li>
<li class="ps"><a href="headers/list/reverse.hpp.html">reverse.hpp</a></li>
<li class="ps"><a href="headers/list/size.hpp.html">size.hpp</a></li>
<li class="ps"><a href="headers/list/to_tuple.hpp.html">to_tuple.hpp</a></li>
<li class="ps"><a href="headers/list/transform.hpp.html">transform.hpp</a></li>
<li><a href="headers/logical.hpp.html">logical.hpp</a></li>
<li>logical/</li>
<li class="ps"><a href="headers/logical/and.hpp.html">and.hpp</a></li>
<li class="ps"><a href="headers/logical/bitand.hpp.html">bitand.hpp</a></li>
<li class="ps"><a href="headers/logical/bitnor.hpp.html">bitnor.hpp</a></li>
<li class="ps"><a href="headers/logical/bitor.hpp.html">bitor.hpp</a></li>
<li class="ps"><a href="headers/logical/bitxor.hpp.html">bitxor.hpp</a></li>
<li class="ps"><a href="headers/logical/bool.hpp.html">bool.hpp</a></li>
<li class="ps"><a href="headers/logical/compl.hpp.html">compl.hpp</a></li>
<li class="ps"><a href="headers/logical/nor.hpp.html">nor.hpp</a></li>
<li class="ps"><a href="headers/logical/not.hpp.html">not.hpp</a></li>
<li class="ps"><a href="headers/logical/or.hpp.html">or.hpp</a></li>
<li class="ps"><a href="headers/logical/xor.hpp.html">xor.hpp</a></li>
<li><a href="headers/max.hpp.html">max.hpp*</a></li>
<li><a href="headers/min.hpp.html">min.hpp*</a></li>
<li><a href="headers/punctuation.hpp.html">punctuation.hpp</a></li>
<li>punctuation/</li>
<li class="ps"><a href="headers/punctuation/comma.hpp.html">comma.hpp</a></li>
<li class="ps"><a href="headers/punctuation/comma_if.hpp.html">comma_if.hpp</a></li>
<li class="ps"><a href="headers/punctuation/paren.hpp.html">paren.hpp</a></li>
<li class="ps"><a href="headers/punctuation/paren_if.hpp.html">paren_if.hpp</a></li>
<li><a href="headers/repeat.hpp.html">repeat.hpp*</a></li>
<li><a href="headers/repeat_2nd.hpp.html">repeat_2nd.hpp*</a></li>
<li><a href="headers/repeat_3rd.hpp.html">repeat_3rd.hpp*</a></li>
<li><a href="headers/repeat_from_to.hpp.html">repeat_from_to.hpp*</a></li>
<li><a href="headers/repeat_from_to_2nd.hpp.html">repeat_from_to_2nd.hpp*</a></li>
<li><a href="headers/repeat_from_to_3rd.hpp.html">repeat_from_to_3rd.hpp*</a></li>
<li><a href="headers/repetition.hpp.html">repetition.hpp</a></li>
<li>repetition/</li>
<li class="ps"><a href="headers/repetition/deduce_r.hpp.html">deduce_r.hpp</a></li>
<li class="ps"><a href="headers/repetition/deduce_z.hpp.html">deduce_z.hpp</a></li>
<li class="ps"><a href="headers/repetition/enum.hpp.html">enum.hpp</a></li>
<li class="ps"><a href="headers/repetition/enum_binary_params.hpp.html">enum_binary_params.hpp</a></li>
<li class="ps"><a href="headers/repetition/enum_params.hpp.html">enum_params.hpp</a></li>
<li class="ps"><a href="headers/repetition/enum_params_with_a_default.hpp.html">enum_params_with_a_default.hpp</a></li>
<li class="ps"><a href="headers/repetition/enum_params_with_defaults.hpp.html">enum_params_with_defaults.hpp</a></li>
<li class="ps"><a href="headers/repetition/enum_shifted_params.hpp.html">enum_shifted_params.hpp</a></li>
<li class="ps"><a href="headers/repetition/enum_shifted.hpp.html">enum_shifted.hpp</a></li>
<li class="ps"><a href="headers/repetition/enum_trailing.hpp.html">enum_trailing.hpp</a></li>
<li class="ps"><a href="headers/repetition/enum_trailing_binary_params.hpp.html">enum_trailing_binary_params.hpp</a></li>
<li class="ps"><a href="headers/repetition/enum_trailing_params.hpp.html">enum_trailing_params.hpp</a></li>
<li class="ps"><a href="headers/repetition/for.hpp.html">for.hpp</a></li>
<li class="ps"><a href="headers/repetition/repeat.hpp.html">repeat.hpp</a></li>
<li class="ps"><a href="headers/repetition/repeat_from_to.hpp.html">repeat_from_to.hpp</a></li>
<li><a href="headers/selection.hpp.html">selection.hpp</a></li>
<li>selection/</li>
<li class="ps"><a href="headers/selection/max.hpp.html">max.hpp</a></li>
<li class="ps"><a href="headers/selection/min.hpp.html">min.hpp</a></li>
<li><a href="headers/set.hpp.html">set.hpp</a></li>
<li>set/</li>
<li class="ps"><a href="headers/set/cat.hpp.html">cat.hpp</a></li>
<li class="ps"><a href="headers/set/elem.hpp.html">elem.hpp</a></li>
<li class="ps"><a href="headers/set/enum.hpp.html">enum.hpp</a></li>
<li class="ps"><a href="headers/set/filter.hpp.html">filter.hpp</a></li>
<li class="ps"><a href="headers/set/first_n.hpp.html">first_n.hpp</a></li>
<li class="ps"><a href="headers/set/fold_left.hpp.html">fold_left.hpp</a></li>
<li class="ps"><a href="headers/set/fold_right.hpp.html">fold_right.hpp</a></li>
<li class="ps"><a href="headers/set/for_each.hpp.html">for_each.hpp</a></li>
<li class="ps"><a href="headers/set/for_each_i.hpp.html">for_each_i.hpp</a></li>
<li class="ps"><a href="headers/set/for_each_product.hpp.html">for_each_product.hpp</a></li>
<li class="ps"><a href="headers/set/insert.hpp.html">insert.hpp</a></li>
<li class="ps"><a href="headers/set/pop_back.hpp.html">pop_back.hpp</a></li>
<li class="ps"><a href="headers/set/pop_front.hpp.html">pop_front.hpp</a></li>
<li class="ps"><a href="headers/set/push_back.hpp.html">push_back.hpp</a></li>
<li class="ps"><a href="headers/set/push_front.hpp.html">push_front.hpp</a></li>
<li class="ps"><a href="headers/set/remove.hpp.html">remove.hpp</a></li>
<li class="ps"><a href="headers/set/replace.hpp.html">replace.hpp</a></li>
<li class="ps"><a href="headers/set/rest_n.hpp.html">rest_n.hpp</a></li>
<li class="ps"><a href="headers/set/reverse.hpp.html">reverse.hpp</a></li>
<li class="ps"><a href="headers/set/set.hpp.html">set.hpp</a></li>
<li class="ps"><a href="headers/set/size.hpp.html">size.hpp</a></li>
<li class="ps"><a href="headers/set/subset.hpp.html">subset.hpp</a></li>
<li class="ps"><a href="headers/set/to_array.hpp.html">to_array.hpp</a></li>
<li class="ps"><a href="headers/set/to_tuple.hpp.html">to_tuple.hpp</a></li>
<li class="ps"><a href="headers/set/transform.hpp.html">transform.hpp</a></li>
<li><a href="headers/slot.hpp.html">slot.hpp</a></li>
<li>slot/</li>
<li class="ps"><a href="headers/slot/slot.hpp.html">slot.hpp</a></li>
<li><a href="headers/tuple.hpp.html">tuple.hpp</a></li>
<li>tuple/</li>
<li class="ps"><a href="headers/tuple/elem.hpp.html">elem.hpp</a></li>
<li class="ps"><a href="headers/tuple/eat.hpp.html">eat.hpp</a></li>
<li class="ps"><a href="headers/tuple/rem.hpp.html">rem.hpp</a></li>
<li class="ps"><a href="headers/tuple/reverse.hpp.html">reverse.hpp</a></li>
<li class="ps"><a href="headers/tuple/to_list.hpp.html">to_list.hpp</a></li>
<li class="ps"><a href="headers/tuple/to_set.hpp.html">to_set.hpp</a></li>
<li><a href="headers/stringize.hpp.html">stringize.hpp</a></li>
<li><a href="headers/while.hpp.html">while.hpp*</a></li>
<li>
../</li>
<li class="ps">
<a href="headers/preprocessor.hpp.html">preprocessor.hpp</a></li>
<li>
<a href="headers/arithmetic.hpp.html">arithmetic.hpp</a></li>
<li>
arithmetic/</li>
<li class="ps">
<a href="headers/arithmetic/add.hpp.html">add.hpp</a></li>
<li class="ps">
<a href="headers/arithmetic/dec.hpp.html">dec.hpp</a></li>
<li class="ps">
<a href="headers/arithmetic/div.hpp.html">div.hpp</a></li>
<li class="ps">
<a href="headers/arithmetic/inc.hpp.html">inc.hpp</a></li>
<li class="ps">
<a href="headers/arithmetic/mod.hpp.html">mod.hpp</a></li>
<li class="ps">
<a href="headers/arithmetic/mul.hpp.html">mul.hpp</a></li>
<li class="ps">
<a href="headers/arithmetic/sub.hpp.html">sub.hpp</a></li>
<li>
<a href="headers/array.hpp.html">array.hpp</a></li>
<li>
array/</li>
<li class="ps">
<a href="headers/array/data.hpp.html">data.hpp</a></li>
<li class="ps">
<a href="headers/array/elem.hpp.html">elem.hpp</a></li>
<li class="ps">
<a href="headers/array/insert.hpp.html">insert.hpp</a></li>
<li class="ps">
<a href="headers/array/pop_back.hpp.html">pop_back.hpp</a></li>
<li class="ps">
<a href="headers/array/pop_front.hpp.html">pop_front.hpp</a></li>
<li class="ps">
<a href="headers/array/push_back.hpp.html">push_back.hpp</a></li>
<li class="ps">
<a href="headers/array/push_front.hpp.html">push_front.hpp</a></li>
<li class="ps">
<a href="headers/array/remove.hpp.html">remove.hpp</a></li>
<li class="ps">
<a href="headers/array/replace.hpp.html">replace.hpp</a></li>
<li class="ps">
<a href="headers/array/reverse.hpp.html">reverse.hpp</a></li>
<li class="ps">
<a href="headers/array/size.hpp.html">size.hpp</a></li>
<li>
<a href="headers/assert_msg.hpp.html">assert_msg.hpp*</a></li>
<li>
<a href="headers/cat.hpp.html">cat.hpp</a></li>
<li>
<a href="headers/comma.hpp.html">comma.hpp*</a></li>
<li>
<a href="headers/comma_if.hpp.html">comma_if.hpp*</a></li>
<li>
<a href="headers/comparison.hpp.html">comparison.hpp</a></li>
<li>
comparison/</li>
<li class="ps">
<a href="headers/comparison/equal.hpp.html">equal.hpp</a></li>
<li class="ps">
<a href="headers/comparison/greater.hpp.html">greater.hpp</a></li>
<li class="ps">
<a href="headers/comparison/greater_equal.hpp.html">greater_equal.hpp</a></li>
<li class="ps">
<a href="headers/comparison/less.hpp.html">less.hpp</a></li>
<li class="ps">
<a href="headers/comparison/less_equal.hpp.html">less_equal.hpp</a></li>
<li class="ps">
<a href="headers/comparison/not_equal.hpp.html">not_equal.hpp</a></li>
<li>
config/</li>
<li class="ps">
<a href="headers/config/limits.hpp.html">limits.hpp</a></li>
<li>
<a href="headers/control.hpp.html">control.hpp</a></li>
<li>
control/</li>
<li class="ps">
<a href="headers/control/deduce_d.hpp.html">deduce_d.hpp</a></li>
<li class="ps">
<a href="headers/control/expr_if.hpp.html">expr_if.hpp</a></li>
<li class="ps">
<a href="headers/control/expr_iif.hpp.html">expr_iif.hpp</a></li>
<li class="ps">
<a href="headers/control/if.hpp.html">if.hpp</a></li>
<li class="ps">
<a href="headers/control/iif.hpp.html">iif.hpp</a></li>
<li class="ps">
<a href="headers/control/while.hpp.html">while.hpp</a></li>
<li>
<a href="headers/debug.hpp.html">debug.hpp</a></li>
<li>
debug/</li>
<li class="ps">
<a href="headers/debug/assert.hpp.html">assert.hpp</a></li>
<li class="ps">
<a href="headers/debug/line.hpp.html">line.hpp</a></li>
<li>
<a href="headers/dec.hpp.html">dec.hpp*</a></li>
<li>
<a href="headers/empty.hpp.html">empty.hpp*</a></li>
<li>
<a href="headers/enum.hpp.html">enum.hpp*</a></li>
<li>
<a href="headers/enum_params.hpp.html">enum_params.hpp*</a></li>
<li>
<a href="headers/enum_params_with_a_default.hpp.html">enum_params_with_a_default.hpp*</a></li>
<li>
<a href="headers/enum_params_with_defaults.hpp.html">enum_params_with_defaults.hpp*</a></li>
<li>
<a href="headers/enum_shifted.hpp.html">enum_shifted.hpp*</a></li>
<li>
<a href="headers/enum_shifted_params.hpp.html">enum_shifted_params.hpp*</a></li>
<li>
<a href="headers/expand.hpp.html">expand.hpp*</a></li>
<li>
<a href="headers/expr_if.hpp.html">expr_if.hpp*</a></li>
<li>
<a href="headers/facilities.hpp.html">facilities.hpp</a></li>
<li>
facilities/</li>
<li class="ps">
<a href="headers/facilities/apply.hpp.html">apply.hpp</a></li>
<li class="ps">
<a href="headers/facilities/empty.hpp.html">empty.hpp</a></li>
<li class="ps">
<a href="headers/facilities/expand.hpp.html">expand.hpp</a></li>
<li class="ps">
<a href="headers/facilities/identity.hpp.html">identity.hpp</a></li>
<li class="ps">
<a href="headers/facilities/intercept.hpp.html">intercept.hpp</a></li>
<li>
<a href="headers/for.hpp.html">for.hpp*</a></li>
<li>
<a href="headers/identity.hpp.html">identity.hpp*</a></li>
<li>
<a href="headers/if.hpp.html">if.hpp*</a></li>
<li>
<a href="headers/inc.hpp.html">inc.hpp*</a></li>
<li>
<a href="headers/iterate.hpp.html">iterate.hpp*</a></li>
<li>
<a href="headers/iteration.hpp.html">iteration.hpp</a></li>
<li>
iteration/</li>
<li class="ps">
<a href="headers/iteration/iterate.hpp.html">iterate.hpp</a></li>
<li class="ps">
<a href="headers/iteration/local.hpp.html">local.hpp</a></li>
<li class="ps">
<a href="headers/iteration/self.hpp.html">self.hpp</a></li>
<li>
<a href="headers/library.hpp.html">library.hpp</a></li>
<li>
<a href="headers/limits.hpp.html">limits.hpp*</a></li>
<li>
<a href="headers/list.hpp.html">list.hpp</a></li>
<li>
list/</li>
<li class="ps">
<a href="headers/list/adt.hpp.html">adt.hpp</a></li>
<li class="ps">
<a href="headers/list/append.hpp.html">append.hpp</a></li>
<li class="ps">
<a href="headers/list/at.hpp.html">at.hpp</a></li>
<li class="ps">
<a href="headers/list/cat.hpp.html">cat.hpp</a></li>
<li class="ps">
<a href="headers/list/enum.hpp.html">enum.hpp</a></li>
<li class="ps">
<a href="headers/list/filter.hpp.html">filter.hpp</a></li>
<li class="ps">
<a href="headers/list/first_n.hpp.html">first_n.hpp</a></li>
<li class="ps">
<a href="headers/list/fold_left.hpp.html">fold_left.hpp</a></li>
<li class="ps">
<a href="headers/list/fold_right.hpp.html">fold_right.hpp</a></li>
<li class="ps">
<a href="headers/list/for_each.hpp.html">for_each.hpp</a></li>
<li class="ps">
<a href="headers/list/for_each_i.hpp.html">for_each_i.hpp</a></li>
<li class="ps">
<a href="headers/list/for_each_product.hpp.html">for_each_product.hpp</a></li>
<li class="ps">
<a href="headers/list/rest_n.hpp.html">rest_n.hpp</a></li>
<li class="ps">
<a href="headers/list/reverse.hpp.html">reverse.hpp</a></li>
<li class="ps">
<a href="headers/list/size.hpp.html">size.hpp</a></li>
<li class="ps">
<a href="headers/list/to_tuple.hpp.html">to_tuple.hpp</a></li>
<li class="ps">
<a href="headers/list/transform.hpp.html">transform.hpp</a></li>
<li>
<a href="headers/logical.hpp.html">logical.hpp</a></li>
<li>
logical/</li>
<li class="ps">
<a href="headers/logical/and.hpp.html">and.hpp</a></li>
<li class="ps">
<a href="headers/logical/bitand.hpp.html">bitand.hpp</a></li>
<li class="ps">
<a href="headers/logical/bitnor.hpp.html">bitnor.hpp</a></li>
<li class="ps">
<a href="headers/logical/bitor.hpp.html">bitor.hpp</a></li>
<li class="ps">
<a href="headers/logical/bitxor.hpp.html">bitxor.hpp</a></li>
<li class="ps">
<a href="headers/logical/bool.hpp.html">bool.hpp</a></li>
<li class="ps">
<a href="headers/logical/compl.hpp.html">compl.hpp</a></li>
<li class="ps">
<a href="headers/logical/nor.hpp.html">nor.hpp</a></li>
<li class="ps">
<a href="headers/logical/not.hpp.html">not.hpp</a></li>
<li class="ps">
<a href="headers/logical/or.hpp.html">or.hpp</a></li>
<li class="ps">
<a href="headers/logical/xor.hpp.html">xor.hpp</a></li>
<li>
<a href="headers/max.hpp.html">max.hpp*</a></li>
<li>
<a href="headers/min.hpp.html">min.hpp*</a></li>
<li>
<a href="headers/punctuation.hpp.html">punctuation.hpp</a></li>
<li>
punctuation/</li>
<li class="ps">
<a href="headers/punctuation/comma.hpp.html">comma.hpp</a></li>
<li class="ps">
<a href="headers/punctuation/comma_if.hpp.html">comma_if.hpp</a></li>
<li class="ps">
<a href="headers/punctuation/paren.hpp.html">paren.hpp</a></li>
<li class="ps">
<a href="headers/punctuation/paren_if.hpp.html">paren_if.hpp</a></li>
<li>
<a href="headers/repeat.hpp.html">repeat.hpp*</a></li>
<li>
<a href="headers/repeat_2nd.hpp.html">repeat_2nd.hpp*</a></li>
<li>
<a href="headers/repeat_3rd.hpp.html">repeat_3rd.hpp*</a></li>
<li>
<a href="headers/repeat_from_to.hpp.html">repeat_from_to.hpp*</a></li>
<li>
<a href="headers/repeat_from_to_2nd.hpp.html">repeat_from_to_2nd.hpp*</a></li>
<li>
<a href="headers/repeat_from_to_3rd.hpp.html">repeat_from_to_3rd.hpp*</a></li>
<li>
<a href="headers/repetition.hpp.html">repetition.hpp</a></li>
<li>
repetition/</li>
<li class="ps">
<a href="headers/repetition/deduce_r.hpp.html">deduce_r.hpp</a></li>
<li class="ps">
<a href="headers/repetition/deduce_z.hpp.html">deduce_z.hpp</a></li>
<li class="ps">
<a href="headers/repetition/enum.hpp.html">enum.hpp</a></li>
<li class="ps">
<a href="headers/repetition/enum_binary_params.hpp.html">enum_binary_params.hpp</a></li>
<li class="ps">
<a href="headers/repetition/enum_params.hpp.html">enum_params.hpp</a></li>
<li class="ps">
<a href="headers/repetition/enum_params_with_a_default.hpp.html">enum_params_with_a_default.hpp</a></li>
<li class="ps">
<a href="headers/repetition/enum_params_with_defaults.hpp.html">enum_params_with_defaults.hpp</a></li>
<li class="ps">
<a href="headers/repetition/enum_shifted_params.hpp.html">enum_shifted_params.hpp</a></li>
<li class="ps">
<a href="headers/repetition/enum_shifted.hpp.html">enum_shifted.hpp</a></li>
<li class="ps">
<a href="headers/repetition/enum_trailing.hpp.html">enum_trailing.hpp</a></li>
<li class="ps">
<a href="headers/repetition/enum_trailing_binary_params.hpp.html">enum_trailing_binary_params.hpp</a></li>
<li class="ps">
<a href="headers/repetition/enum_trailing_params.hpp.html">enum_trailing_params.hpp</a></li>
<li class="ps">
<a href="headers/repetition/for.hpp.html">for.hpp</a></li>
<li class="ps">
<a href="headers/repetition/repeat.hpp.html">repeat.hpp</a></li>
<li class="ps">
<a href="headers/repetition/repeat_from_to.hpp.html">repeat_from_to.hpp</a></li>
<li>
<a href="headers/selection.hpp.html">selection.hpp</a></li>
<li>
selection/</li>
<li class="ps">
<a href="headers/selection/max.hpp.html">max.hpp</a></li>
<li class="ps">
<a href="headers/selection/min.hpp.html">min.hpp</a></li>
<li>
<a href="headers/seq.hpp.html">seq.hpp</a></li>
<li>
seq/</li>
<li class="ps">
<a href="headers/seq/cat.hpp.html">cat.hpp</a></li>
<li class="ps">
<a href="headers/seq/elem.hpp.html">elem.hpp</a></li>
<li class="ps">
<a href="headers/seq/enum.hpp.html">enum.hpp</a></li>
<li class="ps">
<a href="headers/seq/filter.hpp.html">filter.hpp</a></li>
<li class="ps">
<a href="headers/seq/first_n.hpp.html">first_n.hpp</a></li>
<li class="ps">
<a href="headers/seq/fold_left.hpp.html">fold_left.hpp</a></li>
<li class="ps">
<a href="headers/seq/fold_right.hpp.html">fold_right.hpp</a></li>
<li class="ps">
<a href="headers/seq/for_each.hpp.html">for_each.hpp</a></li>
<li class="ps">
<a href="headers/seq/for_each_i.hpp.html">for_each_i.hpp</a></li>
<li class="ps">
<a href="headers/seq/for_each_product.hpp.html">for_each_product.hpp</a></li>
<li class="ps">
<a href="headers/seq/insert.hpp.html">insert.hpp</a></li>
<li class="ps">
<a href="headers/seq/pop_back.hpp.html">pop_back.hpp</a></li>
<li class="ps">
<a href="headers/seq/pop_front.hpp.html">pop_front.hpp</a></li>
<li class="ps">
<a href="headers/seq/push_back.hpp.html">push_back.hpp</a></li>
<li class="ps">
<a href="headers/seq/push_front.hpp.html">push_front.hpp</a></li>
<li class="ps">
<a href="headers/seq/remove.hpp.html">remove.hpp</a></li>
<li class="ps">
<a href="headers/seq/replace.hpp.html">replace.hpp</a></li>
<li class="ps">
<a href="headers/seq/rest_n.hpp.html">rest_n.hpp</a></li>
<li class="ps">
<a href="headers/seq/reverse.hpp.html">reverse.hpp</a></li>
<li class="ps">
<a href="headers/seq/seq.hpp.html">seq.hpp</a></li>
<li class="ps">
<a href="headers/seq/size.hpp.html">size.hpp</a></li>
<li class="ps">
<a href="headers/seq/subseq.hpp.html">subseq.hpp</a></li>
<li class="ps">
<a href="headers/seq/to_array.hpp.html">to_array.hpp</a></li>
<li class="ps">
<a href="headers/seq/to_tuple.hpp.html">to_tuple.hpp</a></li>
<li class="ps">
<a href="headers/seq/transform.hpp.html">transform.hpp</a></li>
<li>
<a href="headers/slot.hpp.html">slot.hpp</a></li>
<li>
slot/</li>
<li class="ps">
<a href="headers/slot/slot.hpp.html">slot.hpp</a></li>
<li>
<a href="headers/tuple.hpp.html">tuple.hpp</a></li>
<li>
tuple/</li>
<li class="ps">
<a href="headers/tuple/elem.hpp.html">elem.hpp</a></li>
<li class="ps">
<a href="headers/tuple/eat.hpp.html">eat.hpp</a></li>
<li class="ps">
<a href="headers/tuple/rem.hpp.html">rem.hpp</a></li>
<li class="ps">
<a href="headers/tuple/reverse.hpp.html">reverse.hpp</a></li>
<li class="ps">
<a href="headers/tuple/to_list.hpp.html">to_list.hpp</a></li>
<li class="ps">
<a href="headers/tuple/to_seq.hpp.html">to_seq.hpp</a></li>
<li>
<a href="headers/stringize.hpp.html">stringize.hpp</a></li>
<li>
<a href="headers/while.hpp.html">while.hpp*</a></li>
</ul>
</body>
</html>

View File

@ -7,23 +7,38 @@
<div style="margin-left: 0px;">
The <b>config/limits.hpp</b> header defines various library limits.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/config/limits.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/limit_dim.html">BOOST_PP_LIMIT_DIM</a></li>
<li><a href="../../ref/limit_for.html">BOOST_PP_LIMIT_FOR</a></li>
<li><a href="../../ref/limit_iteration.html">BOOST_PP_LIMIT_ITERATION</a></li>
<li><a href="../../ref/limit_iteration_dim.html">BOOST_PP_LIMIT_ITERATION_DIM</a></li>
<li><a href="../../ref/limit_mag.html">BOOST_PP_LIMIT_MAG</a></li>
<li><a href="../../ref/limit_repeat.html">BOOST_PP_LIMIT_REPEAT</a></li>
<li><a href="../../ref/limit_set.html">BOOST_PP_LIMIT_SET</a></li>
<li><a href="../../ref/limit_slot_count.html">BOOST_PP_LIMIT_SLOT_COUNT</a></li>
<li><a href="../../ref/limit_slot_sig.html">BOOST_PP_LIMIT_SLOT_SIG</a></li>
<li><a href="../../ref/limit_tuple.html">BOOST_PP_LIMIT_TUPLE</a></li>
<li><a href="../../ref/limit_while.html">BOOST_PP_LIMIT_WHILE</a></li>
<li>
<a href="../../ref/limit_dim.html">BOOST_PP_LIMIT_DIM</a></li>
<li>
<a href="../../ref/limit_for.html">BOOST_PP_LIMIT_FOR</a></li>
<li>
<a href="../../ref/limit_iteration.html">BOOST_PP_LIMIT_ITERATION</a></li>
<li>
<a href="../../ref/limit_iteration_dim.html">BOOST_PP_LIMIT_ITERATION_DIM</a></li>
<li>
<a href="../../ref/limit_mag.html">BOOST_PP_LIMIT_MAG</a></li>
<li>
<a href="../../ref/limit_repeat.html">BOOST_PP_LIMIT_REPEAT</a></li>
<li>
<a href="../../ref/limit_seq.html">BOOST_PP_LIMIT_SEQ</a></li>
<li>
<a href="../../ref/limit_slot_count.html">BOOST_PP_LIMIT_SLOT_COUNT</a></li>
<li>
<a href="../../ref/limit_slot_sig.html">BOOST_PP_LIMIT_SLOT_SIG</a></li>
<li>
<a href="../../ref/limit_tuple.html">BOOST_PP_LIMIT_TUPLE</a></li>
<li>
<a href="../../ref/limit_while.html">BOOST_PP_LIMIT_WHILE</a></li>
</ul>
</body>
</html>

View File

@ -1,43 +1,72 @@
<html>
<head>
<title>set.hpp</title>
<title>seq.hpp</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set.hpp</b> includes the headers in the <i>set</i> folder.
The <b>seq.hpp</b> includes the headers in the <i>seq</i> folder.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq.hpp&gt;</b>
</div>
<h4>Includes</h4>
<h4>
Includes
</h4>
<ul>
<li><a href="set/cat.hpp.html">&lt;boost/preprocessor/set/cat.hpp&gt;</a></li>
<li><a href="set/elem.hpp.html">&lt;boost/preprocessor/set/elem.hpp&gt;</a></li>
<li><a href="set/enum.hpp.html">&lt;boost/preprocessor/set/enum.hpp&gt;</a></li>
<li><a href="set/filter.hpp.html">&lt;boost/preprocessor/set/filter.hpp&gt;</a></li>
<li><a href="set/first_n.hpp.html">&lt;boost/preprocessor/set/first_n.hpp&gt;</a></li>
<li><a href="set/fold_left.hpp.html">&lt;boost/preprocessor/set/fold_left.hpp&gt;</a></li>
<li><a href="set/fold_right.hpp.html">&lt;boost/preprocessor/set/fold_right.hpp&gt;</a></li>
<li><a href="set/for_each.hpp.html">&lt;boost/preprocessor/set/for_each.hpp&gt;</a></li>
<li><a href="set/for_each_i.hpp.html">&lt;boost/preprocessor/set/for_each_i.hpp&gt;</a></li>
<li><a href="set/for_each_product.hpp.html">&lt;boost/preprocessor/set/for_each_product.hpp&gt;</a></li>
<li><a href="set/insert.hpp.html">&lt;boost/preprocessor/set/insert.hpp&gt;</a></li>
<li><a href="set/pop_back.hpp.html">&lt;boost/preprocessor/set/pop_back.hpp&gt;</a></li>
<li><a href="set/pop_front.hpp.html">&lt;boost/preprocessor/set/pop_front.hpp&gt;</a></li>
<li><a href="set/push_back.hpp.html">&lt;boost/preprocessor/set/push_back.hpp&gt;</a></li>
<li><a href="set/push_front.hpp.html">&lt;boost/preprocessor/set/push_front.hpp&gt;</a></li>
<li><a href="set/remove.hpp.html">&lt;boost/preprocessor/set/remove.hpp&gt;</a></li>
<li><a href="set/replace.hpp.html">&lt;boost/preprocessor/set/replace.hpp&gt;</a></li>
<li><a href="set/rest_n.hpp.html">&lt;boost/preprocessor/set/rest_n.hpp&gt;</a></li>
<li><a href="set/reverse.hpp.html">&lt;boost/preprocessor/set/reverse.hpp&gt;</a></li>
<li><a href="set/set.hpp.html">&lt;boost/preprocessor/set/set.hpp&gt;</a></li>
<li><a href="set/size.hpp.html">&lt;boost/preprocessor/set/size.hpp&gt;</a></li>
<li><a href="set/subset.hpp.html">&lt;boost/preprocessor/set/subset.hpp&gt;</a></li>
<li><a href="set/to_array.hpp.html">&lt;boost/preprocessor/set/to_array.hpp&gt;</a></li>
<li><a href="set/to_tuple.hpp.html">&lt;boost/preprocessor/set/to_tuple.hpp&gt;</a></li>
<li><a href="set/transform.hpp.html">&lt;boost/preprocessor/set/transform.hpp&gt;</a></li>
<li>
<a href="seq/cat.hpp.html">&lt;boost/preprocessor/seq/cat.hpp&gt;</a></li>
<li>
<a href="seq/elem.hpp.html">&lt;boost/preprocessor/seq/elem.hpp&gt;</a></li>
<li>
<a href="seq/enum.hpp.html">&lt;boost/preprocessor/seq/enum.hpp&gt;</a></li>
<li>
<a href="seq/filter.hpp.html">&lt;boost/preprocessor/seq/filter.hpp&gt;</a></li>
<li>
<a href="seq/first_n.hpp.html">&lt;boost/preprocessor/seq/first_n.hpp&gt;</a></li>
<li>
<a href="seq/fold_left.hpp.html">&lt;boost/preprocessor/seq/fold_left.hpp&gt;</a></li>
<li>
<a href="seq/fold_right.hpp.html">&lt;boost/preprocessor/seq/fold_right.hpp&gt;</a></li>
<li>
<a href="seq/for_each.hpp.html">&lt;boost/preprocessor/seq/for_each.hpp&gt;</a></li>
<li>
<a href="seq/for_each_i.hpp.html">&lt;boost/preprocessor/seq/for_each_i.hpp&gt;</a></li>
<li>
<a href="seq/for_each_product.hpp.html">&lt;boost/preprocessor/seq/for_each_product.hpp&gt;</a></li>
<li>
<a href="seq/insert.hpp.html">&lt;boost/preprocessor/seq/insert.hpp&gt;</a></li>
<li>
<a href="seq/pop_back.hpp.html">&lt;boost/preprocessor/seq/pop_back.hpp&gt;</a></li>
<li>
<a href="seq/pop_front.hpp.html">&lt;boost/preprocessor/seq/pop_front.hpp&gt;</a></li>
<li>
<a href="seq/push_back.hpp.html">&lt;boost/preprocessor/seq/push_back.hpp&gt;</a></li>
<li>
<a href="seq/push_front.hpp.html">&lt;boost/preprocessor/seq/push_front.hpp&gt;</a></li>
<li>
<a href="seq/remove.hpp.html">&lt;boost/preprocessor/seq/remove.hpp&gt;</a></li>
<li>
<a href="seq/replace.hpp.html">&lt;boost/preprocessor/seq/replace.hpp&gt;</a></li>
<li>
<a href="seq/rest_n.hpp.html">&lt;boost/preprocessor/seq/rest_n.hpp&gt;</a></li>
<li>
<a href="seq/reverse.hpp.html">&lt;boost/preprocessor/seq/reverse.hpp&gt;</a></li>
<li>
<a href="seq/seq.hpp.html">&lt;boost/preprocessor/seq/seq.hpp&gt;</a></li>
<li>
<a href="seq/size.hpp.html">&lt;boost/preprocessor/seq/size.hpp&gt;</a></li>
<li>
<a href="seq/subseq.hpp.html">&lt;boost/preprocessor/seq/subseq.hpp&gt;</a></li>
<li>
<a href="seq/to_array.hpp.html">&lt;boost/preprocessor/seq/to_array.hpp&gt;</a></li>
<li>
<a href="seq/to_tuple.hpp.html">&lt;boost/preprocessor/seq/to_tuple.hpp&gt;</a></li>
<li>
<a href="seq/transform.hpp.html">&lt;boost/preprocessor/seq/transform.hpp&gt;</a></li>
</ul>
</body>
</html>

View File

@ -1,20 +1,27 @@
<html>
<head>
<title>set/cat.hpp</title>
<title>seq/cat.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/cat.hpp</b> header defines macros for concatenating all elements in a <i>set</i>.
The <b>seq/cat.hpp</b> header defines macros for concatenating all elements in
a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/cat.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/cat.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_cat.html">BOOST_PP_SET_CAT</a></li>
<li><a href="../../ref/set_cat_s.html">BOOST_PP_SET_CAT_S</a></li>
<li>
<a href="../../ref/seq_cat.html">BOOST_PP_SEQ_CAT</a></li>
<li>
<a href="../../ref/seq_cat_s.html">BOOST_PP_SEQ_CAT_S</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,24 @@
<html>
<head>
<title>set/elem.hpp</title>
<title>seq/elem.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/elem.hpp</b> header defines a macro to extract an element from a <i>set</i>.
The <b>seq/elem.hpp</b> header defines a macro to extract an element from a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/elem.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/elem.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_elem.html">BOOST_PP_SET_ELEM</a></li>
<li>
<a href="../../ref/seq_elem.html">BOOST_PP_SEQ_ELEM</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,24 @@
<html>
<head>
<title>set/enum.hpp</title>
<title>seq/enum.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/enum.hpp</b> header defines a macro to enumerate the elements in a <i>set</i>.
The <b>seq/enum.hpp</b> header defines a macro to enumerate the elements in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/enum.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/enum.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_enum.html">BOOST_PP_SET_ENUM</a></li>
<li>
<a href="../../ref/seq_enum.html">BOOST_PP_SEQ_ENUM</a></li>
</ul>
</body>
</html>

View File

@ -1,20 +1,26 @@
<html>
<head>
<title>set/filter.hpp</title>
<title>seq/filter.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/filter.hpp</b> header defines macros to filter a <i>set</i>.
The <b>seq/filter.hpp</b> header defines macros to filter a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/filter.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/filter.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_filter.html">BOOST_PP_SET_FILTER</a></li>
<li><a href="../../ref/set_filter_s.html">BOOST_PP_SET_FILTER_S</a></li>
<li>
<a href="../../ref/seq_filter.html">BOOST_PP_SEQ_FILTER</a></li>
<li>
<a href="../../ref/seq_filter_s.html">BOOST_PP_SEQ_FILTER_S</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,25 @@
<html>
<head>
<title>set/first_n.hpp</title>
<title>seq/first_n.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/first_n.hpp</b> header defines a macro that returns the first <i>N</i> elements of a <i>set</i>.
The <b>seq/first_n.hpp</b> header defines a macro that returns the first <i>N</i>
elements of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/first_n.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/first_n.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_first_n.html">BOOST_PP_SET_FIRST_N</a></li>
<li>
<a href="../../ref/seq_first_n.html">BOOST_PP_SEQ_FIRST_N</a></li>
</ul>
</body>
</html>

View File

@ -1,20 +1,27 @@
<html>
<head>
<title>set/fold_left.hpp</title>
<title>seq/fold_left.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/fold_left.hpp</b> header defines macros for folding (or accumulating) a <i>set</i> left-to-right.
The <b>seq/fold_left.hpp</b> header defines macros for folding (or
accumulating) a <i>seq</i> left-to-right.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/fold_left.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/fold_left.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_fold_left.html">BOOST_PP_SET_FOLD_LEFT</a></li>
<li><a href="../../ref/set_fold_left_s.html">BOOST_PP_SET_FOLD_LEFT_<i>s</i></a></li>
<li>
<a href="../../ref/seq_fold_left.html">BOOST_PP_SEQ_FOLD_LEFT</a></li>
<li>
<a href="../../ref/seq_fold_left_s.html">BOOST_PP_SEQ_FOLD_LEFT_<i>s</i></a></li>
</ul>
</body>
</html>

View File

@ -1,20 +1,27 @@
<html>
<head>
<title>set/fold_right.hpp</title>
<title>seq/fold_right.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/fold_right.hpp</b> header defines macros for folding (or accumulating) a <i>set</i> right-to-left.
The <b>seq/fold_right.hpp</b> header defines macros for folding (or
accumulating) a <i>seq</i> right-to-left.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/fold_right.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/fold_right.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_fold_right.html">BOOST_PP_SET_FOLD_RIGHT</a></li>
<li><a href="../../ref/set_fold_right_s.html">BOOST_PP_SET_FOLD_RIGHT_<i>s</i></a></li>
<li>
<a href="../../ref/seq_fold_right.html">BOOST_PP_SEQ_FOLD_RIGHT</a></li>
<li>
<a href="../../ref/seq_fold_right_s.html">BOOST_PP_SEQ_FOLD_RIGHT_<i>s</i></a></li>
</ul>
</body>
</html>

View File

@ -1,20 +1,27 @@
<html>
<head>
<title>set/for_each.hpp</title>
<title>seq/for_each.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/for_each.hpp</b> header defines macros to repeat a macro for each element in a <i>set</i>.
The <b>seq/for_each.hpp</b> header defines macros to repeat a macro for each
element in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/for_each.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/for_each.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_for_each.html">BOOST_PP_SET_FOR_EACH</a></li>
<li><a href="../../ref/set_for_each_r.html">BOOST_PP_SET_FOR_EACH_R</a></li>
<li>
<a href="../../ref/seq_for_each.html">BOOST_PP_SEQ_FOR_EACH</a></li>
<li>
<a href="../../ref/seq_for_each_r.html">BOOST_PP_SEQ_FOR_EACH_R</a></li>
</ul>
</body>
</html>

View File

@ -1,20 +1,27 @@
<html>
<head>
<title>set/for_each_i.hpp</title>
<title>seq/for_each_i.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/for_each_i.hpp</b> header defines macros to repeat a macro for each element in a <i>set</i>.
The <b>seq/for_each_i.hpp</b> header defines macros to repeat a macro for each
element in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/for_each_i.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/for_each_i.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_for_each_i.html">BOOST_PP_SET_FOR_EACH_I</a></li>
<li><a href="../../ref/set_for_each_i_r.html">BOOST_PP_SET_FOR_EACH_I_R</a></li>
<li>
<a href="../../ref/seq_for_each_i.html">BOOST_PP_SEQ_FOR_EACH_I</a></li>
<li>
<a href="../../ref/seq_for_each_i_r.html">BOOST_PP_SEQ_FOR_EACH_I_R</a></li>
</ul>
</body>
</html>

View File

@ -1,20 +1,27 @@
<html>
<head>
<title>set/for_each_product.hpp</title>
<title>seq/for_each_product.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/for_each_product.hpp</b> header defines macros to repeat a macro for each cartesian product of several <i>sets</i>.
The <b>seq/for_each_product.hpp</b> header defines macros to repeat a macro for
each cartesian product of several <i>seqs</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/for_each_product.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/for_each_product.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_for_each_product.html">BOOST_PP_SET_FOR_EACH_PRODUCT</a></li>
<li><a href="../../ref/set_for_each_product_r.html">BOOST_PP_SET_FOR_EACH_PRODUCT_R</a></li>
<li>
<a href="../../ref/seq_for_each_product.html">BOOST_PP_SEQ_FOR_EACH_PRODUCT</a></li>
<li>
<a href="../../ref/seq_for_each_product_r.html">BOOST_PP_SEQ_FOR_EACH_PRODUCT_R</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,24 @@
<html>
<head>
<title>set/insert.hpp</title>
<title>seq/insert.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/insert.hpp</b> header defines a macro to insert an element into a <i>set</i>.
The <b>seq/insert.hpp</b> header defines a macro to insert an element into a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/insert.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/insert.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_insert.html">BOOST_PP_SET_INSERT</a></li>
<li>
<a href="../../ref/seq_insert.html">BOOST_PP_SEQ_INSERT</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,25 @@
<html>
<head>
<title>set/pop_back.hpp</title>
<title>seq/pop_back.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/pop_back.hpp</b> header defines a macro to pop the last element off a <i>set</i>.
The <b>seq/pop_back.hpp</b> header defines a macro to pop the last element off
a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/pop_back.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/pop_back.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_pop_back.html">BOOST_PP_SET_POP_BACK</a></li>
<li>
<a href="../../ref/seq_pop_back.html">BOOST_PP_SEQ_POP_BACK</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,25 @@
<html>
<head>
<title>set/pop_front.hpp</title>
<title>seq/pop_front.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/pop_front.hpp</b> header defines a macro to pop the first element off a <i>set</i>.
The <b>seq/pop_front.hpp</b> header defines a macro to pop the first element
off a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/pop_front.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/pop_front.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_pop_front.html">BOOST_PP_SET_POP_FRONT</a></li>
<li>
<a href="../../ref/seq_pop_front.html">BOOST_PP_SEQ_POP_FRONT</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,24 @@
<html>
<head>
<title>set/push_back.hpp</title>
<title>seq/push_back.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/push_back.hpp</b> header defines a macro to append an element to a <i>set</i>.
The <b>seq/push_back.hpp</b> header defines a macro to append an element to a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/push_back.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/push_back.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_push_back.html">BOOST_PP_SET_PUSH_BACK</a></li>
<li>
<a href="../../ref/seq_push_back.html">BOOST_PP_SEQ_PUSH_BACK</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,24 @@
<html>
<head>
<title>set/push_front.hpp</title>
<title>seq/push_front.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/push_front.hpp</b> header defines a macro to prepend an element to a <i>set</i>.
The <b>seq/push_front.hpp</b> header defines a macro to prepend an element to a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/push_front.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/push_front.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_push_front.html">BOOST_PP_SET_PUSH_FRONT</a></li>
<li>
<a href="../../ref/seq_push_front.html">BOOST_PP_SEQ_PUSH_FRONT</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,24 @@
<html>
<head>
<title>set/remove.hpp</title>
<title>seq/remove.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/remove.hpp</b> header defines a macro to remove an element from a <i>set</i>.
The <b>seq/remove.hpp</b> header defines a macro to remove an element from a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/remove.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/remove.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_remove.html">BOOST_PP_SET_REMOVE</a></li>
<li>
<a href="../../ref/seq_remove.html">BOOST_PP_SEQ_REMOVE</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,24 @@
<html>
<head>
<title>set/replace.hpp</title>
<title>seq/replace.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/replace.hpp</b> header defines a macro to replace an element in a <i>set</i>.
The <b>seq/replace.hpp</b> header defines a macro to replace an element in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/replace.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/replace.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_replace.html">BOOST_PP_SET_REPLACE</a></li>
<li>
<a href="../../ref/seq_replace.html">BOOST_PP_SEQ_REPLACE</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,25 @@
<html>
<head>
<title>set/rest_n.hpp</title>
<title>seq/rest_n.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/rest_n.hpp</b> header defines a macro for extracting a group of elements from the end of a <i>set</i>.
The <b>seq/rest_n.hpp</b> header defines a macro for extracting a group of
elements from the end of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/rest_n.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/rest_n.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_rest_n.html">BOOST_PP_SET_REST_N</a></li>
<li>
<a href="../../ref/seq_rest_n.html">BOOST_PP_SEQ_REST_N</a></li>
</ul>
</body>
</html>

View File

@ -1,20 +1,26 @@
<html>
<head>
<title>set/reverse.hpp</title>
<title>seq/reverse.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/reverse.hpp</b> header defines macros to reverse a <i>set</i>.
The <b>seq/reverse.hpp</b> header defines macros to reverse a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/reverse.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/reverse.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_reverse.html">BOOST_PP_SET_REVERSE</a></li>
<li><a href="../../ref/set_reverse_s.html">BOOST_PP_SET_REVERSE_S</a></li>
<li>
<a href="../../ref/seq_reverse.html">BOOST_PP_SEQ_REVERSE</a></li>
<li>
<a href="../../ref/seq_reverse_s.html">BOOST_PP_SEQ_REVERSE_S</a></li>
</ul>
</body>
</html>

View File

@ -1,21 +1,28 @@
<html>
<head>
<title>set/set.hpp</title>
<title>seq/seq.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/set.hpp</b> header defines basic primitives for manipulating <i>sets</i>.
The <b>seq/seq.hpp</b> header defines basic primitives for manipulating <i>seqs</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/set.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/seq.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_head.html">BOOST_PP_SET_HEAD</a></li>
<li><a href="../../ref/set_nil.html">BOOST_PP_SET_NIL</a></li>
<li><a href="../../ref/set_tail.html">BOOST_PP_SET_TAIL</a></li>
<li>
<a href="../../ref/seq_head.html">BOOST_PP_SEQ_HEAD</a></li>
<li>
<a href="../../ref/seq_nil.html">BOOST_PP_SEQ_NIL</a></li>
<li>
<a href="../../ref/seq_tail.html">BOOST_PP_SEQ_TAIL</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,24 @@
<html>
<head>
<title>set/size.hpp</title>
<title>seq/size.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/size.hpp</b> header defines a macro to calculate the size of a <i>set</i>.
The <b>seq/size.hpp</b> header defines a macro to calculate the size of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/size.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/size.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_size.html">BOOST_PP_SET_SIZE</a></li>
<li>
<a href="../../ref/seq_size.html">BOOST_PP_SEQ_SIZE</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,24 @@
<html>
<head>
<title>set/subset.hpp</title>
<title>seq/subseq.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/subset.hpp</b> header defines a macro that extracts a subset from a <i>set</i>.
The <b>seq/subseq.hpp</b> header defines a macro that extracts a subseq from a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/subset.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/subseq.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_subset.html">BOOST_PP_SET_SUBSET</a></li>
<li>
<a href="../../ref/seq_subseq.html">BOOST_PP_SEQ_SUBSEQ</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,25 @@
<html>
<head>
<title>set/to_array.hpp</title>
<title>seq/to_array.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/to_array.hpp</b> header defines a macro that converts a <i>set</i> to an <i>array</i>.
The <b>seq/to_array.hpp</b> header defines a macro that converts a <i>seq</i> to
an <i>array</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/to_array.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/to_array.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_to_array.html">BOOST_PP_SET_TO_ARRAY</a></li>
<li>
<a href="../../ref/seq_to_array.html">BOOST_PP_SEQ_TO_ARRAY</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,25 @@
<html>
<head>
<title>set/to_tuple.hpp</title>
<title>seq/to_tuple.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/to_tuple.hpp</b> header defines a macro that converts a <i>set</i> to an <i>tuple</i>.
The <b>seq/to_tuple.hpp</b> header defines a macro that converts a <i>seq</i> to
an <i>tuple</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/to_tuple.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/to_tuple.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_to_tuple.html">BOOST_PP_SET_TO_TUPLE</a></li>
<li>
<a href="../../ref/seq_to_tuple.html">BOOST_PP_SEQ_TO_TUPLE</a></li>
</ul>
</body>
</html>

View File

@ -1,20 +1,26 @@
<html>
<head>
<title>set/transform.hpp</title>
<title>seq/transform.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>set/transform.hpp</b> header defines macros to transform a <i>set</i>.
The <b>seq/transform.hpp</b> header defines macros to transform a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/set/transform.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/seq/transform.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/set_transform.html">BOOST_PP_SET_TRANSFORM</a></li>
<li><a href="../../ref/set_transform_s.html">BOOST_PP_SET_TRANSFORM_S</a></li>
<li>
<a href="../../ref/seq_transform.html">BOOST_PP_SEQ_TRANSFORM</a></li>
<li>
<a href="../../ref/seq_transform_s.html">BOOST_PP_SEQ_TRANSFORM_S</a></li>
</ul>
</body>
</html>

View File

@ -1,19 +1,25 @@
<html>
<head>
<title>tuple/to_set.hpp</title>
<title>tuple/to_seq.hpp</title>
<link rel="stylesheet" type="text/css" href="../../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>tuple/to_set.hpp</b> header defines a macro that converts a <i>tuple</i> to a <i>set</i>.
The <b>tuple/to_seq.hpp</b> header defines a macro that converts a <i>tuple</i>
to a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#include <b>&lt;boost/preprocessor/tuple/to_set.hpp&gt;</b>
#include <b>&lt;boost/preprocessor/tuple/to_seq.hpp&gt;</b>
</div>
<h4>Contents</h4>
<h4>
Contents
</h4>
<ul>
<li><a href="../../ref/tuple_to_set.html">BOOST_PP_TUPLE_TO_SET</a></li>
<li>
<a href="../../ref/tuple_to_seq.html">BOOST_PP_TUPLE_TO_SEQ</a></li>
</ul>
</body>
</html>

View File

@ -7,7 +7,8 @@
<frameset cols="350,*" frameborder="0" border="3">
<frame name="index" src="contents.html" scrolling="auto">
<frame name="desc" src="blank.html" scrolling="auto">
</frameset>
<noframes>..</noframes>
</frameset>
</frameseq>
<noframes>
..</noframes>
</frameseq>
</html>

View File

@ -5,265 +5,506 @@
<base target="desc">
</head>
<body>
<h4>Reference <small><a href="contents.html" target="index">[back]</a></small></h4>
<h4>
Reference <small><a href="contents.html" target="index">[back]</a></small>
</h4>
<ul>
<!-- A -->
<li><a href="ref/add.html">ADD</a></li>
<li><a href="ref/add_d.html">ADD_D</a></li>
<li><a href="ref/and.html">AND</a></li>
<li><a href="ref/apply.html">APPLY</a></li>
<li><a href="ref/array_data.html">ARRAY_DATA</a></li>
<li><a href="ref/array_elem.html">ARRAY_ELEM</a></li>
<li><a href="ref/array_insert.html">ARRAY_INSERT</a></li>
<li><a href="ref/array_insert_d.html">ARRAY_INSERT_D</a></li>
<li><a href="ref/array_pop_back.html">ARRAY_POP_BACK</a></li>
<li><a href="ref/array_pop_back_z.html">ARRAY_POP_BACK_Z</a></li>
<li><a href="ref/array_pop_front.html">ARRAY_POP_FRONT</a></li>
<li><a href="ref/array_pop_front_z.html">ARRAY_POP_FRONT_Z</a></li>
<li><a href="ref/array_push_back.html">ARRAY_PUSH_BACK</a></li>
<li><a href="ref/array_push_front.html">ARRAY_PUSH_FRONT</a></li>
<li><a href="ref/array_remove.html">ARRAY_REMOVE</a></li>
<li><a href="ref/array_remove_d.html">ARRAY_REMOVE_D</a></li>
<li><a href="ref/array_replace.html">ARRAY_REPLACE</a></li>
<li><a href="ref/array_replace_d.html">ARRAY_REPLACE_D</a></li>
<li><a href="ref/array_reverse.html">ARRAY_REVERSE</a></li>
<li><a href="ref/array_size.html">ARRAY_SIZE</a></li>
<li><a href="ref/assert.html">ASSERT</a></li>
<li><a href="ref/assert_msg.html">ASSERT_MSG</a></li>
<li><a href="ref/assign_slot.html">ASSIGN_SLOT</a></li>
<li>
<a href="ref/add.html">ADD</a></li>
<li>
<a href="ref/add_d.html">ADD_D</a></li>
<li>
<a href="ref/and.html">AND</a></li>
<li>
<a href="ref/apply.html">APPLY</a></li>
<li>
<a href="ref/array_data.html">ARRAY_DATA</a></li>
<li>
<a href="ref/array_elem.html">ARRAY_ELEM</a></li>
<li>
<a href="ref/array_insert.html">ARRAY_INSERT</a></li>
<li>
<a href="ref/array_insert_d.html">ARRAY_INSERT_D</a></li>
<li>
<a href="ref/array_pop_back.html">ARRAY_POP_BACK</a></li>
<li>
<a href="ref/array_pop_back_z.html">ARRAY_POP_BACK_Z</a></li>
<li>
<a href="ref/array_pop_front.html">ARRAY_POP_FRONT</a></li>
<li>
<a href="ref/array_pop_front_z.html">ARRAY_POP_FRONT_Z</a></li>
<li>
<a href="ref/array_push_back.html">ARRAY_PUSH_BACK</a></li>
<li>
<a href="ref/array_push_front.html">ARRAY_PUSH_FRONT</a></li>
<li>
<a href="ref/array_remove.html">ARRAY_REMOVE</a></li>
<li>
<a href="ref/array_remove_d.html">ARRAY_REMOVE_D</a></li>
<li>
<a href="ref/array_replace.html">ARRAY_REPLACE</a></li>
<li>
<a href="ref/array_replace_d.html">ARRAY_REPLACE_D</a></li>
<li>
<a href="ref/array_reverse.html">ARRAY_REVERSE</a></li>
<li>
<a href="ref/array_size.html">ARRAY_SIZE</a></li>
<li>
<a href="ref/assert.html">ASSERT</a></li>
<li>
<a href="ref/assert_msg.html">ASSERT_MSG</a></li>
<li>
<a href="ref/assign_slot.html">ASSIGN_SLOT</a></li>
<!-- B -->
<li><a href="ref/bitand.html">BITAND</a></li>
<li><a href="ref/bitnor.html">BITNOR</a></li>
<li><a href="ref/bitor.html">BITOR</a></li>
<li><a href="ref/bitxor.html">BITXOR</a></li>
<li><a href="ref/bool.html">BOOL</a></li>
<li>
<a href="ref/bitand.html">BITAND</a></li>
<li>
<a href="ref/bitnor.html">BITNOR</a></li>
<li>
<a href="ref/bitor.html">BITOR</a></li>
<li>
<a href="ref/bitxor.html">BITXOR</a></li>
<li>
<a href="ref/bool.html">BOOL</a></li>
<!-- C -->
<li><a href="ref/cat.html">CAT</a></li>
<li><a href="ref/comma.html">COMMA</a></li>
<li><a href="ref/comma_if.html">COMMA_IF</a></li>
<li><a href="ref/compl.html">COMPL</a></li>
<li><a href="ref/config_extended_line_info.html">CONFIG_EXTENDED_LINE_INFO</a></li>
<li>
<a href="ref/cat.html">CAT</a></li>
<li>
<a href="ref/comma.html">COMMA</a></li>
<li>
<a href="ref/comma_if.html">COMMA_IF</a></li>
<li>
<a href="ref/compl.html">COMPL</a></li>
<li>
<a href="ref/config_extended_line_info.html">CONFIG_EXTENDED_LINE_INFO</a></li>
<!-- D -->
<li><a href="ref/dec.html">DEC</a></li>
<li><a href="ref/deduce_d.html">DEDUCE_D</a></li>
<li><a href="ref/deduce_r.html">DEDUCE_R</a></li>
<li><a href="ref/deduce_z.html">DEDUCE_Z</a></li>
<li><a href="ref/div.html">DIV</a></li>
<li><a href="ref/div_d.html">DIV_D</a></li>
<li>
<a href="ref/dec.html">DEC</a></li>
<li>
<a href="ref/deduce_d.html">DEDUCE_D</a></li>
<li>
<a href="ref/deduce_r.html">DEDUCE_R</a></li>
<li>
<a href="ref/deduce_z.html">DEDUCE_Z</a></li>
<li>
<a href="ref/div.html">DIV</a></li>
<li>
<a href="ref/div_d.html">DIV_D</a></li>
<!-- E -->
<li><a href="ref/empty.html">EMPTY</a></li>
<li><a href="ref/enum.html">ENUM</a></li>
<li><a href="ref/enum_binary_params.html">ENUM_BINARY_PARAMS</a></li>
<li><a href="ref/enum_binary_params_z.html">ENUM_BINARY_PARAMS_Z</a></li>
<li><a href="ref/enum_params.html">ENUM_PARAMS</a></li>
<li><a href="ref/enum_params_with_a_default.html">ENUM_PARAMS_WITH_A_DEFAULT*</a></li>
<li><a href="ref/enum_params_with_defaults.html">ENUM_PARAMS_WITH_DEFAULTS*</a></li>
<li><a href="ref/enum_params_z.html">ENUM_PARAMS_Z</a></li>
<li><a href="ref/enum_shifted.html">ENUM_SHIFTED</a></li>
<li><a href="ref/enum_shifted_params.html">ENUM_SHIFTED_PARAMS</a></li>
<li><a href="ref/enum_shifted_params_z.html">ENUM_SHIFTED_PARAMS_Z</a></li>
<li><a href="ref/enum_shifted_z.html">ENUM_SHIFTED_<i>z</i></a></li>
<li><a href="ref/enum_trailing.html">ENUM_TRAILING</a></li>
<li><a href="ref/enum_trailing_binary_params.html">ENUM_TRAILING_BINARY_PARAMS</a></li>
<li><a href="ref/enum_trailing_binary_params_z.html">ENUM_TRAILING_BINARY_PARAMS_Z</a></li>
<li><a href="ref/enum_trailing_params.html">ENUM_TRAILING_PARAMS</a></li>
<li><a href="ref/enum_trailing_params_z.html">ENUM_TRAILING_PARAMS_Z</a></li>
<li><a href="ref/enum_trailing_z.html">ENUM_TRAILING_<i>z</i></a></li>
<li><a href="ref/enum_z.html">ENUM_<i>z</i></a></li>
<li><a href="ref/equal.html">EQUAL</a></li>
<li><a href="ref/equal_d.html">EQUAL_D*</a></li>
<li><a href="ref/expand.html">EXPAND</a></li>
<li><a href="ref/expr_if.html">EXPR_IF</a></li>
<li><a href="ref/expr_iif.html">EXPR_IIF</a></li>
<li>
<a href="ref/empty.html">EMPTY</a></li>
<li>
<a href="ref/enum.html">ENUM</a></li>
<li>
<a href="ref/enum_binary_params.html">ENUM_BINARY_PARAMS</a></li>
<li>
<a href="ref/enum_binary_params_z.html">ENUM_BINARY_PARAMS_Z</a></li>
<li>
<a href="ref/enum_params.html">ENUM_PARAMS</a></li>
<li>
<a href="ref/enum_params_with_a_default.html">ENUM_PARAMS_WITH_A_DEFAULT*</a></li>
<li>
<a href="ref/enum_params_with_defaults.html">ENUM_PARAMS_WITH_DEFAULTS*</a></li>
<li>
<a href="ref/enum_params_z.html">ENUM_PARAMS_Z</a></li>
<li>
<a href="ref/enum_shifted.html">ENUM_SHIFTED</a></li>
<li>
<a href="ref/enum_shifted_params.html">ENUM_SHIFTED_PARAMS</a></li>
<li>
<a href="ref/enum_shifted_params_z.html">ENUM_SHIFTED_PARAMS_Z</a></li>
<li>
<a href="ref/enum_shifted_z.html">ENUM_SHIFTED_<i>z</i></a></li>
<li>
<a href="ref/enum_trailing.html">ENUM_TRAILING</a></li>
<li>
<a href="ref/enum_trailing_binary_params.html">ENUM_TRAILING_BINARY_PARAMS</a></li>
<li>
<a href="ref/enum_trailing_binary_params_z.html">ENUM_TRAILING_BINARY_PARAMS_Z</a></li>
<li>
<a href="ref/enum_trailing_params.html">ENUM_TRAILING_PARAMS</a></li>
<li>
<a href="ref/enum_trailing_params_z.html">ENUM_TRAILING_PARAMS_Z</a></li>
<li>
<a href="ref/enum_trailing_z.html">ENUM_TRAILING_<i>z</i></a></li>
<li>
<a href="ref/enum_z.html">ENUM_<i>z</i></a></li>
<li>
<a href="ref/equal.html">EQUAL</a></li>
<li>
<a href="ref/equal_d.html">EQUAL_D*</a></li>
<li>
<a href="ref/expand.html">EXPAND</a></li>
<li>
<a href="ref/expr_if.html">EXPR_IF</a></li>
<li>
<a href="ref/expr_iif.html">EXPR_IIF</a></li>
<!-- F -->
<li><a href="ref/filename_x.html">FILENAME_<i>x</i></a></li>
<li><a href="ref/for.html">FOR</a></li>
<li><a href="ref/for_r.html">FOR_<i>r</i></a></li>
<li><a href="ref/frame_finish.html">FRAME_FINISH</a></li>
<li><a href="ref/frame_flags.html">FRAME_FLAGS</a></li>
<li><a href="ref/frame_iteration.html">FRAME_ITERATION</a></li>
<li><a href="ref/frame_start.html">FRAME_START</a></li>
<li>
<a href="ref/filename_x.html">FILENAME_<i>x</i></a></li>
<li>
<a href="ref/for.html">FOR</a></li>
<li>
<a href="ref/for_r.html">FOR_<i>r</i></a></li>
<li>
<a href="ref/frame_finish.html">FRAME_FINISH</a></li>
<li>
<a href="ref/frame_flags.html">FRAME_FLAGS</a></li>
<li>
<a href="ref/frame_iteration.html">FRAME_ITERATION</a></li>
<li>
<a href="ref/frame_start.html">FRAME_START</a></li>
<!-- G -->
<li><a href="ref/greater.html">GREATER</a></li>
<li><a href="ref/greater_d.html">GREATER_D</a></li>
<li><a href="ref/greater_equal.html">GREATER_EQUAL</a></li>
<li><a href="ref/greater_equal_d.html">GREATER_EQUAL_D</a></li>
<li>
<a href="ref/greater.html">GREATER</a></li>
<li>
<a href="ref/greater_d.html">GREATER_D</a></li>
<li>
<a href="ref/greater_equal.html">GREATER_EQUAL</a></li>
<li>
<a href="ref/greater_equal_d.html">GREATER_EQUAL_D</a></li>
<!-- I -->
<li><a href="ref/identity.html">IDENTITY</a></li>
<li><a href="ref/if.html">IF</a></li>
<li><a href="ref/iif.html">IIF</a></li>
<li><a href="ref/inc.html">INC</a></li>
<li><a href="ref/include_self.html">INCLUDE_SELF</a></li>
<li><a href="ref/indirect_self.html">INDIRECT_SELF</a></li>
<li><a href="ref/intercept.html">INTERCEPT</a></li>
<li><a href="ref/is_iterating.html">IS_ITERATING</a></li>
<li><a href="ref/is_selfish.html">IS_SELFISH</a></li>
<li><a href="ref/iterate.html">ITERATE</a></li>
<li><a href="ref/iteration.html">ITERATION</a></li>
<li><a href="ref/iteration_depth.html">ITERATION_DEPTH</a></li>
<li><a href="ref/iteration_finish.html">ITERATION_FINISH</a></li>
<li><a href="ref/iteration_flags.html">ITERATION_FLAGS</a></li>
<li><a href="ref/iteration_limits.html">ITERATION_LIMITS</a></li>
<li><a href="ref/iteration_params_x.html">ITERATION_PARAMS_<i>x</i></a></li>
<li><a href="ref/iteration_start.html">ITERATION_START</a></li>
<li>
<a href="ref/identity.html">IDENTITY</a></li>
<li>
<a href="ref/if.html">IF</a></li>
<li>
<a href="ref/iif.html">IIF</a></li>
<li>
<a href="ref/inc.html">INC</a></li>
<li>
<a href="ref/include_self.html">INCLUDE_SELF</a></li>
<li>
<a href="ref/indirect_self.html">INDIRECT_SELF</a></li>
<li>
<a href="ref/intercept.html">INTERCEPT</a></li>
<li>
<a href="ref/is_iterating.html">IS_ITERATING</a></li>
<li>
<a href="ref/is_selfish.html">IS_SELFISH</a></li>
<li>
<a href="ref/iterate.html">ITERATE</a></li>
<li>
<a href="ref/iteration.html">ITERATION</a></li>
<li>
<a href="ref/iteration_depth.html">ITERATION_DEPTH</a></li>
<li>
<a href="ref/iteration_finish.html">ITERATION_FINISH</a></li>
<li>
<a href="ref/iteration_flags.html">ITERATION_FLAGS</a></li>
<li>
<a href="ref/iteration_limits.html">ITERATION_LIMITS</a></li>
<li>
<a href="ref/iteration_params_x.html">ITERATION_PARAMS_<i>x</i></a></li>
<li>
<a href="ref/iteration_start.html">ITERATION_START</a></li>
<!-- L -->
<li><a href="ref/less.html">LESS</a></li>
<li><a href="ref/less_d.html">LESS_D</a></li>
<li><a href="ref/less_equal.html">LESS_EQUAL</a></li>
<li><a href="ref/less_equal_d.html">LESS_EQUAL_D</a></li>
<li><a href="ref/limit_dim.html">LIMIT_DIM</a></li>
<li><a href="ref/limit_for.html">LIMIT_FOR</a></li>
<li><a href="ref/limit_iteration.html">LIMIT_ITERATION</a></li>
<li><a href="ref/limit_iteration_dim.html">LIMIT_ITERATION_DIM</a></li>
<li><a href="ref/limit_mag.html">LIMIT_MAG</a></li>
<li><a href="ref/limit_repeat.html">LIMIT_REPEAT</a></li>
<li><a href="ref/limit_set.html">LIMIT_SET</a></li>
<li><a href="ref/limit_slot_count.html">LIMIT_SLOT_COUNT</a></li>
<li><a href="ref/limit_slot_sig.html">LIMIT_SLOT_SIG</a></li>
<li><a href="ref/limit_tuple.html">LIMIT_TUPLE</a></li>
<li><a href="ref/limit_while.html">LIMIT_WHILE</a></li>
<li><a href="ref/line.html">LINE</a></li>
<li><a href="ref/list_append.html">LIST_APPEND</a></li>
<li><a href="ref/list_append_d.html">LIST_APPEND_D</a></li>
<li><a href="ref/list_at.html">LIST_AT</a></li>
<li><a href="ref/list_at_d.html">LIST_AT_D</a></li>
<li><a href="ref/list_cat.html">LIST_CAT</a></li>
<li><a href="ref/list_cat_d.html">LIST_CAT_D</a></li>
<li><a href="ref/list_cons.html">LIST_CONS*</a></li>
<li><a href="ref/list_enum.html">LIST_ENUM</a></li>
<li><a href="ref/list_enum_r.html">LIST_ENUM_R</a></li>
<li><a href="ref/list_filter.html">LIST_FILTER</a></li>
<li><a href="ref/list_filter_d.html">LIST_FILTER_D</a></li>
<li><a href="ref/list_first.html">LIST_FIRST</a></li>
<li><a href="ref/list_first_n.html">LIST_FIRST_N</a></li>
<li><a href="ref/list_first_n_d.html">LIST_FIRST_N_D</a></li>
<li><a href="ref/list_fold_left.html">LIST_FOLD_LEFT</a></li>
<li><a href="ref/list_fold_left_2nd.html">LIST_FOLD_LEFT_2ND*</a></li>
<li><a href="ref/list_fold_left_2nd_d.html">LIST_FOLD_LEFT_2ND_D*</a></li>
<li><a href="ref/list_fold_left_d.html">LIST_FOLD_LEFT_<i>d</i></a></li>
<li><a href="ref/list_fold_left_d_old.html">LIST_FOLD_LEFT_D*</a></li>
<li><a href="ref/list_fold_right.html">LIST_FOLD_RIGHT</a></li>
<li><a href="ref/list_fold_right_2nd.html">LIST_FOLD_RIGHT_2ND*</a></li>
<li><a href="ref/list_fold_right_2nd_d.html">LIST_FOLD_RIGHT_2ND_D*</a></li>
<li><a href="ref/list_fold_right_d.html">LIST_FOLD_RIGHT_<i>d</i></a></li>
<li><a href="ref/list_fold_right_d_old.html">LIST_FOLD_RIGHT_D*</a></li>
<li><a href="ref/list_for_each.html">LIST_FOR_EACH</a></li>
<li><a href="ref/list_for_each_i.html">LIST_FOR_EACH_I</a></li>
<li><a href="ref/list_for_each_i_r.html">LIST_FOR_EACH_I_R</a></li>
<li><a href="ref/list_for_each_product.html">LIST_FOR_EACH_PRODUCT</a></li>
<li><a href="ref/list_for_each_product_r.html">LIST_FOR_EACH_PRODUCT_R</a></li>
<li><a href="ref/list_for_each_r.html">LIST_FOR_EACH_R</a></li>
<li><a href="ref/list_is_cons.html">LIST_IS_CONS</a></li>
<li><a href="ref/list_is_nil.html">LIST_IS_NIL</a></li>
<li><a href="ref/list_nil.html">LIST_NIL*</a></li>
<li><a href="ref/list_rest.html">LIST_REST</a></li>
<li><a href="ref/list_rest_n.html">LIST_REST_N</a></li>
<li><a href="ref/list_rest_n_d.html">LIST_REST_N_D</a></li>
<li><a href="ref/list_reverse.html">LIST_REVERSE</a></li>
<li><a href="ref/list_reverse_d.html">LIST_REVERSE_D</a></li>
<li><a href="ref/list_size.html">LIST_SIZE</a></li>
<li><a href="ref/list_size_d.html">LIST_SIZE_D</a></li>
<li><a href="ref/list_to_tuple.html">LIST_TO_TUPLE</a></li>
<li><a href="ref/list_to_tuple_r.html">LIST_TO_TUPLE_R</a></li>
<li><a href="ref/list_transform.html">LIST_TRANSFORM</a></li>
<li><a href="ref/list_transform_d.html">LIST_TRANSFORM_D</a></li>
<li><a href="ref/local_iterate.html">LOCAL_ITERATE</a></li>
<li><a href="ref/local_limits.html">LOCAL_LIMITS</a></li>
<li><a href="ref/local_macro.html">LOCAL_MACRO</a></li>
<li><a href="ref/lparen.html">LPAREN</a></li>
<li><a href="ref/lparen_if.html">LPAREN_IF</a></li>
<li>
<a href="ref/less.html">LESS</a></li>
<li>
<a href="ref/less_d.html">LESS_D</a></li>
<li>
<a href="ref/less_equal.html">LESS_EQUAL</a></li>
<li>
<a href="ref/less_equal_d.html">LESS_EQUAL_D</a></li>
<li>
<a href="ref/limit_dim.html">LIMIT_DIM</a></li>
<li>
<a href="ref/limit_for.html">LIMIT_FOR</a></li>
<li>
<a href="ref/limit_iteration.html">LIMIT_ITERATION</a></li>
<li>
<a href="ref/limit_iteration_dim.html">LIMIT_ITERATION_DIM</a></li>
<li>
<a href="ref/limit_mag.html">LIMIT_MAG</a></li>
<li>
<a href="ref/limit_repeat.html">LIMIT_REPEAT</a></li>
<li>
<a href="ref/limit_seq.html">LIMIT_SEQ</a></li>
<li>
<a href="ref/limit_slot_count.html">LIMIT_SLOT_COUNT</a></li>
<li>
<a href="ref/limit_slot_sig.html">LIMIT_SLOT_SIG</a></li>
<li>
<a href="ref/limit_tuple.html">LIMIT_TUPLE</a></li>
<li>
<a href="ref/limit_while.html">LIMIT_WHILE</a></li>
<li>
<a href="ref/line.html">LINE</a></li>
<li>
<a href="ref/list_append.html">LIST_APPEND</a></li>
<li>
<a href="ref/list_append_d.html">LIST_APPEND_D</a></li>
<li>
<a href="ref/list_at.html">LIST_AT</a></li>
<li>
<a href="ref/list_at_d.html">LIST_AT_D</a></li>
<li>
<a href="ref/list_cat.html">LIST_CAT</a></li>
<li>
<a href="ref/list_cat_d.html">LIST_CAT_D</a></li>
<li>
<a href="ref/list_cons.html">LIST_CONS*</a></li>
<li>
<a href="ref/list_enum.html">LIST_ENUM</a></li>
<li>
<a href="ref/list_enum_r.html">LIST_ENUM_R</a></li>
<li>
<a href="ref/list_filter.html">LIST_FILTER</a></li>
<li>
<a href="ref/list_filter_d.html">LIST_FILTER_D</a></li>
<li>
<a href="ref/list_first.html">LIST_FIRST</a></li>
<li>
<a href="ref/list_first_n.html">LIST_FIRST_N</a></li>
<li>
<a href="ref/list_first_n_d.html">LIST_FIRST_N_D</a></li>
<li>
<a href="ref/list_fold_left.html">LIST_FOLD_LEFT</a></li>
<li>
<a href="ref/list_fold_left_2nd.html">LIST_FOLD_LEFT_2ND*</a></li>
<li>
<a href="ref/list_fold_left_2nd_d.html">LIST_FOLD_LEFT_2ND_D*</a></li>
<li>
<a href="ref/list_fold_left_d.html">LIST_FOLD_LEFT_<i>d</i></a></li>
<li>
<a href="ref/list_fold_left_d_old.html">LIST_FOLD_LEFT_D*</a></li>
<li>
<a href="ref/list_fold_right.html">LIST_FOLD_RIGHT</a></li>
<li>
<a href="ref/list_fold_right_2nd.html">LIST_FOLD_RIGHT_2ND*</a></li>
<li>
<a href="ref/list_fold_right_2nd_d.html">LIST_FOLD_RIGHT_2ND_D*</a></li>
<li>
<a href="ref/list_fold_right_d.html">LIST_FOLD_RIGHT_<i>d</i></a></li>
<li>
<a href="ref/list_fold_right_d_old.html">LIST_FOLD_RIGHT_D*</a></li>
<li>
<a href="ref/list_for_each.html">LIST_FOR_EACH</a></li>
<li>
<a href="ref/list_for_each_i.html">LIST_FOR_EACH_I</a></li>
<li>
<a href="ref/list_for_each_i_r.html">LIST_FOR_EACH_I_R</a></li>
<li>
<a href="ref/list_for_each_product.html">LIST_FOR_EACH_PRODUCT</a></li>
<li>
<a href="ref/list_for_each_product_r.html">LIST_FOR_EACH_PRODUCT_R</a></li>
<li>
<a href="ref/list_for_each_r.html">LIST_FOR_EACH_R</a></li>
<li>
<a href="ref/list_is_cons.html">LIST_IS_CONS</a></li>
<li>
<a href="ref/list_is_nil.html">LIST_IS_NIL</a></li>
<li>
<a href="ref/list_nil.html">LIST_NIL*</a></li>
<li>
<a href="ref/list_rest.html">LIST_REST</a></li>
<li>
<a href="ref/list_rest_n.html">LIST_REST_N</a></li>
<li>
<a href="ref/list_rest_n_d.html">LIST_REST_N_D</a></li>
<li>
<a href="ref/list_reverse.html">LIST_REVERSE</a></li>
<li>
<a href="ref/list_reverse_d.html">LIST_REVERSE_D</a></li>
<li>
<a href="ref/list_size.html">LIST_SIZE</a></li>
<li>
<a href="ref/list_size_d.html">LIST_SIZE_D</a></li>
<li>
<a href="ref/list_to_tuple.html">LIST_TO_TUPLE</a></li>
<li>
<a href="ref/list_to_tuple_r.html">LIST_TO_TUPLE_R</a></li>
<li>
<a href="ref/list_transform.html">LIST_TRANSFORM</a></li>
<li>
<a href="ref/list_transform_d.html">LIST_TRANSFORM_D</a></li>
<li>
<a href="ref/local_iterate.html">LOCAL_ITERATE</a></li>
<li>
<a href="ref/local_limits.html">LOCAL_LIMITS</a></li>
<li>
<a href="ref/local_macro.html">LOCAL_MACRO</a></li>
<li>
<a href="ref/lparen.html">LPAREN</a></li>
<li>
<a href="ref/lparen_if.html">LPAREN_IF</a></li>
<!-- M -->
<li><a href="ref/max.html">MAX</a></li>
<li><a href="ref/max_d.html">MAX_D</a></li>
<li><a href="ref/min.html">MIN</a></li>
<li><a href="ref/min_d.html">MIN_D</a></li>
<li><a href="ref/mod.html">MOD</a></li>
<li><a href="ref/mod_d.html">MOD_D</a></li>
<li><a href="ref/mul.html">MUL</a></li>
<li><a href="ref/mul_d.html">MUL_D</a></li>
<li>
<a href="ref/max.html">MAX</a></li>
<li>
<a href="ref/max_d.html">MAX_D</a></li>
<li>
<a href="ref/min.html">MIN</a></li>
<li>
<a href="ref/min_d.html">MIN_D</a></li>
<li>
<a href="ref/mod.html">MOD</a></li>
<li>
<a href="ref/mod_d.html">MOD_D</a></li>
<li>
<a href="ref/mul.html">MUL</a></li>
<li>
<a href="ref/mul_d.html">MUL_D</a></li>
<!-- N -->
<li><a href="ref/nil.html">NIL</a></li>
<li><a href="ref/nor.html">NOR</a></li>
<li><a href="ref/not.html">NOT</a></li>
<li><a href="ref/not_equal.html">NOT_EQUAL</a></li>
<li><a href="ref/not_equal_d.html">NOT_EQUAL_D*</a></li>
<li>
<a href="ref/nil.html">NIL</a></li>
<li>
<a href="ref/nor.html">NOR</a></li>
<li>
<a href="ref/not.html">NOT</a></li>
<li>
<a href="ref/not_equal.html">NOT_EQUAL</a></li>
<li>
<a href="ref/not_equal_d.html">NOT_EQUAL_D*</a></li>
<!-- O -->
<li><a href="ref/or.html">OR</a></li>
<li>
<a href="ref/or.html">OR</a></li>
<!-- R -->
<li><a href="ref/relative_finish.html">RELATIVE_FINISH</a></li>
<li><a href="ref/relative_flags.html">RELATIVE_FLAGS</a></li>
<li><a href="ref/relative_iteration.html">RELATIVE_ITERATION</a></li>
<li><a href="ref/relative_start.html">RELATIVE_START</a></li>
<li><a href="ref/repeat.html">REPEAT</a></li>
<li><a href="ref/repeat_1st.html">REPEAT_1ST*</a></li>
<li><a href="ref/repeat_2nd.html">REPEAT_2ND*</a></li>
<li><a href="ref/repeat_3rd.html">REPEAT_3RD*</a></li>
<li><a href="ref/repeat_from_to.html">REPEAT_FROM_TO</a></li>
<li><a href="ref/repeat_from_to_1st.html">REPEAT_FROM_TO_1ST*</a></li>
<li><a href="ref/repeat_from_to_2nd.html">REPEAT_FROM_TO_2ND*</a></li>
<li><a href="ref/repeat_from_to_3rd.html">REPEAT_FROM_TO_3RD*</a></li>
<li><a href="ref/repeat_from_to_d.html">REPEAT_FROM_TO_D</a></li>
<li><a href="ref/repeat_from_to_d_z.html">REPEAT_FROM_TO_D_<i>z</i></a></li>
<li><a href="ref/repeat_from_to_z.html">REPEAT_FROM_TO_<i>z</i></a></li>
<li><a href="ref/repeat_z.html">REPEAT_<i>z</i></a></li>
<li><a href="ref/rparen.html">RPAREN</a></li>
<li><a href="ref/rparen_if.html">RPAREN_IF</a></li>
<li>
<a href="ref/relative_finish.html">RELATIVE_FINISH</a></li>
<li>
<a href="ref/relative_flags.html">RELATIVE_FLAGS</a></li>
<li>
<a href="ref/relative_iteration.html">RELATIVE_ITERATION</a></li>
<li>
<a href="ref/relative_start.html">RELATIVE_START</a></li>
<li>
<a href="ref/repeat.html">REPEAT</a></li>
<li>
<a href="ref/repeat_1st.html">REPEAT_1ST*</a></li>
<li>
<a href="ref/repeat_2nd.html">REPEAT_2ND*</a></li>
<li>
<a href="ref/repeat_3rd.html">REPEAT_3RD*</a></li>
<li>
<a href="ref/repeat_from_to.html">REPEAT_FROM_TO</a></li>
<li>
<a href="ref/repeat_from_to_1st.html">REPEAT_FROM_TO_1ST*</a></li>
<li>
<a href="ref/repeat_from_to_2nd.html">REPEAT_FROM_TO_2ND*</a></li>
<li>
<a href="ref/repeat_from_to_3rd.html">REPEAT_FROM_TO_3RD*</a></li>
<li>
<a href="ref/repeat_from_to_d.html">REPEAT_FROM_TO_D</a></li>
<li>
<a href="ref/repeat_from_to_d_z.html">REPEAT_FROM_TO_D_<i>z</i></a></li>
<li>
<a href="ref/repeat_from_to_z.html">REPEAT_FROM_TO_<i>z</i></a></li>
<li>
<a href="ref/repeat_z.html">REPEAT_<i>z</i></a></li>
<li>
<a href="ref/rparen.html">RPAREN</a></li>
<li>
<a href="ref/rparen_if.html">RPAREN_IF</a></li>
<!-- S -->
<li><a href="ref/set_cat.html">SET_CAT</a></li>
<li><a href="ref/set_cat_s.html">SET_CAT_S</a></li>
<li><a href="ref/set_elem.html">SET_ELEM</a></li>
<li><a href="ref/set_enum.html">SET_ENUM</a></li>
<li><a href="ref/set_filter.html">SET_FILTER</a></li>
<li><a href="ref/set_filter_s.html">SET_FILTER_S</a></li>
<li><a href="ref/set_first_n.html">SET_FIRST_N</a></li>
<li><a href="ref/set_fold_left.html">SET_FOLD_LEFT</a></li>
<li><a href="ref/set_fold_left_s.html">SET_FOLD_LEFT_<i>s</i></a></li>
<li><a href="ref/set_fold_right.html">SET_FOLD_RIGHT</a></li>
<li><a href="ref/set_fold_right_s.html">SET_FOLD_RIGHT_<i>s</i></a></li>
<li><a href="ref/set_for_each.html">SET_FOR_EACH</a></li>
<li><a href="ref/set_for_each_i.html">SET_FOR_EACH_I</a></li>
<li><a href="ref/set_for_each_i_r.html">SET_FOR_EACH_I_R</a></li>
<li><a href="ref/set_for_each_product.html">SET_FOR_EACH_PRODUCT</a></li>
<li><a href="ref/set_for_each_product_r.html">SET_FOR_EACH_PRODUCT_R</a></li>
<li><a href="ref/set_for_each_r.html">SET_FOR_EACH_R</a></li>
<li><a href="ref/set_head.html">SET_HEAD</a></li>
<li><a href="ref/set_insert.html">SET_INSERT</a></li>
<li><a href="ref/set_nil.html">SET_NIL</a></li>
<li><a href="ref/set_pop_back.html">SET_POP_BACK</a></li>
<li><a href="ref/set_pop_front.html">SET_POP_FRONT</a></li>
<li><a href="ref/set_push_back.html">SET_PUSH_BACK</a></li>
<li><a href="ref/set_push_front.html">SET_PUSH_FRONT</a></li>
<li><a href="ref/set_remove.html">SET_REMOVE</a></li>
<li><a href="ref/set_replace.html">SET_REPLACE</a></li>
<li><a href="ref/set_rest_n.html">SET_REST_N</a></li>
<li><a href="ref/set_reverse.html">SET_REVERSE</a></li>
<li><a href="ref/set_reverse_s.html">SET_REVERSE_S</a></li>
<li><a href="ref/set_size.html">SET_SIZE</a></li>
<li><a href="ref/set_subset.html">SET_SUBSET</a></li>
<li><a href="ref/set_tail.html">SET_TAIL</a></li>
<li><a href="ref/set_to_array.html">SET_TO_ARRAY</a></li>
<li><a href="ref/set_to_tuple.html">SET_TO_TUPLE</a></li>
<li><a href="ref/set_transform.html">SET_TRANSFORM</a></li>
<li><a href="ref/set_transform_s.html">SET_TRANSFORM_S</a></li>
<li><a href="ref/slot.html">SLOT</a></li>
<li><a href="ref/stringize.html">STRINGIZE</a></li>
<li><a href="ref/sub.html">SUB</a></li>
<li><a href="ref/sub_d.html">SUB_D</a></li>
<li>
<a href="ref/seq_cat.html">SEQ_CAT</a></li>
<li>
<a href="ref/seq_cat_s.html">SEQ_CAT_S</a></li>
<li>
<a href="ref/seq_elem.html">SEQ_ELEM</a></li>
<li>
<a href="ref/seq_enum.html">SEQ_ENUM</a></li>
<li>
<a href="ref/seq_filter.html">SEQ_FILTER</a></li>
<li>
<a href="ref/seq_filter_s.html">SEQ_FILTER_S</a></li>
<li>
<a href="ref/seq_first_n.html">SEQ_FIRST_N</a></li>
<li>
<a href="ref/seq_fold_left.html">SEQ_FOLD_LEFT</a></li>
<li>
<a href="ref/seq_fold_left_s.html">SEQ_FOLD_LEFT_<i>s</i></a></li>
<li>
<a href="ref/seq_fold_right.html">SEQ_FOLD_RIGHT</a></li>
<li>
<a href="ref/seq_fold_right_s.html">SEQ_FOLD_RIGHT_<i>s</i></a></li>
<li>
<a href="ref/seq_for_each.html">SEQ_FOR_EACH</a></li>
<li>
<a href="ref/seq_for_each_i.html">SEQ_FOR_EACH_I</a></li>
<li>
<a href="ref/seq_for_each_i_r.html">SEQ_FOR_EACH_I_R</a></li>
<li>
<a href="ref/seq_for_each_product.html">SEQ_FOR_EACH_PRODUCT</a></li>
<li>
<a href="ref/seq_for_each_product_r.html">SEQ_FOR_EACH_PRODUCT_R</a></li>
<li>
<a href="ref/seq_for_each_r.html">SEQ_FOR_EACH_R</a></li>
<li>
<a href="ref/seq_head.html">SEQ_HEAD</a></li>
<li>
<a href="ref/seq_insert.html">SEQ_INSERT</a></li>
<li>
<a href="ref/seq_nil.html">SEQ_NIL</a></li>
<li>
<a href="ref/seq_pop_back.html">SEQ_POP_BACK</a></li>
<li>
<a href="ref/seq_pop_front.html">SEQ_POP_FRONT</a></li>
<li>
<a href="ref/seq_push_back.html">SEQ_PUSH_BACK</a></li>
<li>
<a href="ref/seq_push_front.html">SEQ_PUSH_FRONT</a></li>
<li>
<a href="ref/seq_remove.html">SEQ_REMOVE</a></li>
<li>
<a href="ref/seq_replace.html">SEQ_REPLACE</a></li>
<li>
<a href="ref/seq_rest_n.html">SEQ_REST_N</a></li>
<li>
<a href="ref/seq_reverse.html">SEQ_REVERSE</a></li>
<li>
<a href="ref/seq_reverse_s.html">SEQ_REVERSE_S</a></li>
<li>
<a href="ref/seq_size.html">SEQ_SIZE</a></li>
<li>
<a href="ref/seq_subseq.html">SEQ_SUBSEQ</a></li>
<li>
<a href="ref/seq_tail.html">SEQ_TAIL</a></li>
<li>
<a href="ref/seq_to_array.html">SEQ_TO_ARRAY</a></li>
<li>
<a href="ref/seq_to_tuple.html">SEQ_TO_TUPLE</a></li>
<li>
<a href="ref/seq_transform.html">SEQ_TRANSFORM</a></li>
<li>
<a href="ref/seq_transform_s.html">SEQ_TRANSFORM_S</a></li>
<li>
<a href="ref/slot.html">SLOT</a></li>
<li>
<a href="ref/stringize.html">STRINGIZE</a></li>
<li>
<a href="ref/sub.html">SUB</a></li>
<li>
<a href="ref/sub_d.html">SUB_D</a></li>
<!-- T -->
<li><a href="ref/tuple_eat.html">TUPLE_EAT</a></li>
<li><a href="ref/tuple_elem.html">TUPLE_ELEM</a></li>
<li><a href="ref/tuple_rem.html">TUPLE_REM</a></li>
<li><a href="ref/tuple_rem_ctor.html">TUPLE_REM_CTOR</a></li>
<li><a href="ref/tuple_reverse.html">TUPLE_REVERSE</a></li>
<li><a href="ref/tuple_to_list.html">TUPLE_TO_LIST</a></li>
<li><a href="ref/tuple_to_set.html">TUPLE_TO_SET</a></li>
<li>
<a href="ref/tuple_eat.html">TUPLE_EAT</a></li>
<li>
<a href="ref/tuple_elem.html">TUPLE_ELEM</a></li>
<li>
<a href="ref/tuple_rem.html">TUPLE_REM</a></li>
<li>
<a href="ref/tuple_rem_ctor.html">TUPLE_REM_CTOR</a></li>
<li>
<a href="ref/tuple_reverse.html">TUPLE_REVERSE</a></li>
<li>
<a href="ref/tuple_to_list.html">TUPLE_TO_LIST</a></li>
<li>
<a href="ref/tuple_to_seq.html">TUPLE_TO_SEQ</a></li>
<!-- V -->
<li><a href="ref/value.html">VALUE</a></li>
<li>
<a href="ref/value.html">VALUE</a></li>
<!-- W -->
<li><a href="ref/while.html">WHILE</a></li>
<li><a href="ref/while_d.html">WHILE_<i>d</i></a></li>
<li>
<a href="ref/while.html">WHILE</a></li>
<li>
<a href="ref/while_d.html">WHILE_<i>d</i></a></li>
<!-- X -->
<li><a href="ref/xor.html">XOR</a></li>
<li>
<a href="ref/xor.html">XOR</a></li>
</ul>
</body>
</html>

View File

@ -2,32 +2,42 @@
<head>
<title>BOOST_PP_CONFIG_EXTENDED_LINE_INFO</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_CONFIG_EXTENDED_LINE_INFO</b> is a user-defined macro that determines whether <b>BOOST_PP_LINE</b> outputs extended <i>file-iteration</i> state information.
The <b>BOOST_PP_CONFIG_EXTENDED_LINE_INFO</b> is a user-defined macro that
determines whether <b>BOOST_PP_LINE</b> outputs extended <i>file-iteration</i> state
information.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
#define <b>BOOST_PP_CONFIG_EXTENDED_LINE_INFO</b> <i>n</i>
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>n</dt>
<dd>
The value that determines if <b>BOOST_PP_LINE</b> outputs extended <i>file-iteration</i> information.&nbsp;
This value must be <i>0</i> or <i>1</i>.
The value that determines if <b>BOOST_PP_LINE</b> outputs extended <i>file-iteration</i>
information.&nbsp; This value must be <i>0</i> or <i>1</i>.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
If <i>n</i> is <i>1</i>, <b>BOOST_PP_LINE</b> will output extended data.&nbsp;
By default, this macro is set to <i>0</i>.
By default, this macro is seq to <i>0</i>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="line.html">BOOST_PP_LINE</a></li>
<li>
<a href="line.html">BOOST_PP_LINE</a></li>
</ul>
</body>
</html>

View File

@ -1,21 +1,28 @@
<html>
<head>
<title>BOOST_PP_LIMIT_SET</title>
<title>BOOST_PP_LIMIT_SEQ</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_LIMIT_SET</b> macro defines the maximum <i>set</i> size supported by the library.
The <b>BOOST_PP_LIMIT_SEQ</b> macro defines the maximum <i>seq</i> size
supported by the library.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_LIMIT_SET</b>
<b>BOOST_PP_LIMIT_SEQ</b>
</div>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro currently expands to <i>256</i>.
</div>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/config/limits.hpp.html">&lt;boost/preprocessor/config/limits.hpp&gt;</a>
</div>

View File

@ -1,45 +1,60 @@
<html>
<head>
<title>BOOST_PP_SET_CAT</title>
<title>BOOST_PP_SEQ_CAT</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_CAT</b> macro concatenates all elements in a <i>set</i>.
The <b>BOOST_PP_SEQ_CAT</b> macro concatenates all elements in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_CAT</b>(<i>list</i>)
<b>BOOST_PP_SEQ_CAT</b>(<i>list</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> whose elements are to be concatenated.
The <i>seq</i> whose elements are to be concatenated.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
Elements are concatenated left-to-right starting with index <i>0</i>.
</div>
<div>
For maximum efficiency, use <b>BOOST_PP_SET_CAT_S</b>.
For maximum efficiency, use <b>BOOST_PP_SEQ_CAT_S</b>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_cat_s.html">BOOST_PP_SET_CAT_S</a></li>
<li>
<a href="seq_cat_s.html">BOOST_PP_SEQ_CAT_S</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/cat.hpp.html">&lt;boost/preprocessor/set/cat.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/cat.hpp.html">&lt;boost/preprocessor/seq/cat.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/cat.hpp.html">boost/preprocessor/set/cat.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/cat.hpp.html">boost/preprocessor/seq/cat.hpp</a>&gt;
#define SET (a)(b)(c)
#define SEQ (a)(b)(c)
<a href="set_cat.html">BOOST_PP_SET_CAT</a>(SET) // expands to abc
</pre></div>
<a href="seq_cat.html">BOOST_PP_SEQ_CAT</a>(SEQ) // expands to abc
</pre>
</div>
</body>
</html>

View File

@ -1,39 +1,50 @@
<html>
<head>
<title>BOOST_PP_SET_CAT_S</title>
<title>BOOST_PP_SEQ_CAT_S</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_CAT_S</b> macro concatenates all elements in a <i>set</i>.&nbsp;
It reenters <b>BOOST_PP_SET_FOLD_LEFT</b> with maximum efficiency.
The <b>BOOST_PP_SEQ_CAT_S</b> macro concatenates all elements in a <i>seq</i>.&nbsp;
It reenters <b>BOOST_PP_SEQ_FOLD_LEFT</b> with maximum efficiency.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_CAT_S</b>(<i>s</i>, <i>list</i>)
<b>BOOST_PP_SEQ_CAT_S</b>(<i>s</i>, <i>list</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>s</dt>
<dd>
The next available <b>BOOST_PP_SET_FOLD_LEFT</b> fold step.
The next available <b>BOOST_PP_SEQ_FOLD_LEFT</b> fold step.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> whose elements are to be concatenated.
The <i>seq</i> whose elements are to be concatenated.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
Elements are concatenated left-to-right starting with index <i>0</i>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_cat.html">BOOST_PP_SET_CAT</a></li>
<li>
<a href="seq_cat.html">BOOST_PP_SEQ_CAT</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/cat.hpp.html">&lt;boost/preprocessor/set/cat.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/cat.hpp.html">&lt;boost/preprocessor/seq/cat.hpp&gt;</a>
</div>
</body>
</html>

View File

@ -1,42 +1,54 @@
<html>
<head>
<title>BOOST_PP_SET_ELEM</title>
<title>BOOST_PP_SEQ_ELEM</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_ELEM</b> macro extracts an element from a <i>set</i>.
The <b>BOOST_PP_SEQ_ELEM</b> macro extracts an element from a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_ELEM</b>(<i>i</i>, <i>list</i>)
<b>BOOST_PP_SEQ_ELEM</b>(<i>i</i>, <i>list</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>i</dt>
<dd>
The zero-based index of the element to be extracted.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> from which an element is to be extracted.
The <i>seq</i> from which an element is to be extracted.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
The index <i>i</i> must be in the range of <i>0</i> to <b>BOOST_PP_SET_SIZE</b>(<i>set</i>) - <i>1</i>.
The index <i>i</i> must be in the range of <i>0</i> to <b>BOOST_PP_SEQ_SIZE</b>(<i>seq</i>)
- <i>1</i>.
</div>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/elem.hpp.html">&lt;boost/preprocessor/set/elem.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/elem.hpp.html">&lt;boost/preprocessor/seq/elem.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/elem.hpp.html">boost/preprocessor/set/elem.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/elem.hpp.html">boost/preprocessor/seq/elem.hpp</a>&gt;
<a href="set_elem.html">BOOST_PP_SET_ELEM</a>(1, (a)(b)(c)) // expands to b
<a href="seq_elem.html">BOOST_PP_SEQ_ELEM</a>(1, (a)(b)(c)) // expands to b
#define SET \
#define SEQ \
(0)(1)(2)(3)(4)(5)(6)(7)(8)(9) \
(10)(11)(12)(13)(14)(15)(16)(17)(18)(19) \
(20)(21)(22)(23)(24)(25)(26)(27)(28)(29) \
@ -49,7 +61,8 @@
(90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \
/**/
<a href="set_elem.html">BOOST_PP_SET_ELEM</a>(88, SET) // expands to 88
</pre></div>
<a href="seq_elem.html">BOOST_PP_SEQ_ELEM</a>(88, SEQ) // expands to 88
</pre>
</div>
</body>
</html>

View File

@ -1,42 +1,55 @@
<html>
<head>
<title>BOOST_PP_SET_ENUM</title>
<title>BOOST_PP_SEQ_ENUM</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_ENUM</b> macro enumerates the elements in a <i>set</i>.
The <b>BOOST_PP_SEQ_ENUM</b> macro enumerates the elements in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_ENUM</b>(<i>set</i>)
<b>BOOST_PP_SEQ_ENUM</b>(<i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> from whose elements are to be enumerated.
The <i>seq</i> from whose elements are to be enumerated.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro expands to a comma-separated list of the elements in <i>set</i>.&nbsp;
For example, <b>BOOST_PP_SET_ENUM</b>((<i>x</i>)(<i>y</i>)(<i>z</i>)) expands to...
This macro expands to a comma-separated list of the elements in <i>seq</i>.&nbsp;
For example, <b>BOOST_PP_SEQ_ENUM</b>((<i>x</i>)(<i>y</i>)(<i>z</i>)) expands
to...
<div>
<i>x</i>, <i>y</i>, <i>z</i>
</div>
</div>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/enum.hpp.html">&lt;boost/preprocessor/set/enum.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/enum.hpp.html">&lt;boost/preprocessor/seq/enum.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/enum.hpp.html">boost/preprocessor/set/enum.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/enum.hpp.html">boost/preprocessor/seq/enum.hpp</a>&gt;
#define SET (B)(O)(O)(S)(T)
#define SEQ (B)(O)(O)(S)(T)
<a href="set_enum.html">BOOST_PP_SET_ENUM</a>(SET) // expands to B, O, O, S, T
</pre></div>
<a href="seq_enum.html">BOOST_PP_SEQ_ENUM</a>(SEQ) // expands to B, O, O, S, T
</pre>
</div>
</body>
</html>

View File

@ -1,63 +1,82 @@
<html>
<head>
<title>BOOST_PP_SET_FILTER</title>
<title>BOOST_PP_SEQ_FILTER</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FILTER</b> macro filters a <i>set</i> according to a supplied criterion.
The <b>BOOST_PP_SEQ_FILTER</b> macro filters a <i>seq</i> according to a
supplied criterion.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FILTER</b>(<i>pred</i>, <i>data</i>, <i>set</i>)
<b>BOOST_PP_SEQ_FILTER</b>(<i>pred</i>, <i>data</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>pred</dt>
<dd>
A ternary predicate of the form <i>pred</i>(<i>s</i>, <i>data</i>, <i>elem</i>).&nbsp;
This predicate is expanded by <b>BOOST_PP_SET_FILTER</b> for each element in <i>set</i> with the next available <b>BOOST_PP_SET_FOLD_LEFT</b> fold step,
the auxiliary <i>data</i>, and the current element in <i>set</i>.&nbsp;
This macro must return a integral value in the range of <i>0</i> to <b>BOOST_PP_LIMIT_MAG</b>.&nbsp;
If this predicate expands to non-zero for a certain element, that element is included in the resulting <i>set</i>.
This predicate is expanded by <b>BOOST_PP_SEQ_FILTER</b> for each element in <i>seq</i>
with the next available <b>BOOST_PP_SEQ_FOLD_LEFT</b> fold step, the auxiliary <i>data</i>,
and the current element in <i>seq</i>.&nbsp; This macro must return a integral
value in the range of <i>0</i> to <b>BOOST_PP_LIMIT_MAG</b>.&nbsp; If this
predicate expands to non-zero for a certain element, that element is included
in the resulting <i>seq</i>.
</dd>
<dt>data</dt>
<dd>
Auxiliary data passed to <i>pred</i>.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be filtered.
The <i>seq</i> to be filtered.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro expands <i>pred</i> for each element in <i>set</i>.&nbsp;
It builds a new <i>set</i> out of each element for which <i>pred</i> returns non-zero.
This macro expands <i>pred</i> for each element in <i>seq</i>.&nbsp; It builds
a new <i>seq</i> out of each element for which <i>pred</i> returns non-zero.
</div>
<div>
For maximum efficiency, use <b>BOOST_PP_SET_FILTER_S</b>.
For maximum efficiency, use <b>BOOST_PP_SEQ_FILTER_S</b>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="limit_mag.html">BOOST_PP_LIMIT_MAG</a></li>
<li><a href="set_filter_s.html">BOOST_PP_SET_FILTER_S</a></li>
<li>
<a href="limit_mag.html">BOOST_PP_LIMIT_MAG</a></li>
<li>
<a href="seq_filter_s.html">BOOST_PP_SEQ_FILTER_S</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/filter.hpp.html">&lt;boost/preprocessor/set/filter.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/filter.hpp.html">&lt;boost/preprocessor/seq/filter.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/comparison/less_equal.hpp.html">boost/preprocessor/comparison/less_equal.hpp</a>&gt;
#include &lt;<a href="../headers/set/filter.hpp.html">boost/preprocessor/set/filter.hpp</a>&gt;
#include &lt;<a href="../headers/seq/filter.hpp.html">boost/preprocessor/seq/filter.hpp</a>&gt;
#define SET (1)(3)(2)(5)
#define SEQ (1)(3)(2)(5)
#define PRED(s, data, elem) <a href="less_equal.html">BOOST_PP_LESS_EQUAL</a>(elem, data)
<a href="set_filter.html">BOOST_PP_SET_FILTER</a>(PRED, 3, SET)
<a href="seq_filter.html">BOOST_PP_SEQ_FILTER</a>(PRED, 3, SEQ)
// expands to (1)(3)(2)
</pre></div>
</pre>
</div>
</body>
</html>

View File

@ -1,53 +1,68 @@
<html>
<head>
<title>BOOST_PP_SET_FILTER_S</title>
<title>BOOST_PP_SEQ_FILTER_S</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FILTER_S</b> macro filters a <i>set</i> according to a supplied criterion.&nbsp;
It reenters <b>BOOST_PP_SET_FOLD_LEFT</b> with maximum efficiency.
The <b>BOOST_PP_SEQ_FILTER_S</b> macro filters a <i>seq</i> according to a
supplied criterion.&nbsp; It reenters <b>BOOST_PP_SEQ_FOLD_LEFT</b> with
maximum efficiency.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FILTER_S</b>(<i>s</i>, <i>pred</i>, <i>data</i>, <i>set</i>)
<b>BOOST_PP_SEQ_FILTER_S</b>(<i>s</i>, <i>pred</i>, <i>data</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>s</dt>
<dd>
The next available <b>BOOST_PP_SET_FOLD_LEFT</b> fold step.
The next available <b>BOOST_PP_SEQ_FOLD_LEFT</b> fold step.
</dd>
<dt>pred</dt>
<dd>
A ternary predicate of the form <i>pred</i>(<i>s</i>, <i>data</i>, <i>elem</i>).&nbsp;
This predicate is expanded by <b>BOOST_PP_SET_FILTER</b> for each element in <i>set</i> with the next available <b>BOOST_PP_SET_FOLD_LEFT</b> fold step,
the auxiliary <i>data</i>, and the current element in <i>set</i>.&nbsp;
This macro must return a integral value in the range of <i>0</i> to <b>BOOST_PP_LIMIT_MAG</b>.&nbsp;
If this predicate expands to non-zero for a certain element, that element is included in the resulting <i>set</i>.
This predicate is expanded by <b>BOOST_PP_SEQ_FILTER</b> for each element in <i>seq</i>
with the next available <b>BOOST_PP_SEQ_FOLD_LEFT</b> fold step, the auxiliary <i>data</i>,
and the current element in <i>seq</i>.&nbsp; This macro must return a integral
value in the range of <i>0</i> to <b>BOOST_PP_LIMIT_MAG</b>.&nbsp; If this
predicate expands to non-zero for a certain element, that element is included
in the resulting <i>seq</i>.
</dd>
<dt>data</dt>
<dd>
Auxiliary data passed to <i>pred</i>.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be filtered.
The <i>seq</i> to be filtered.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro expands <i>pred</i> for each element in <i>set</i>.&nbsp;
It builds a new <i>set</i> out of each element for which <i>pred</i> returns non-zero.
This macro expands <i>pred</i> for each element in <i>seq</i>.&nbsp; It builds
a new <i>seq</i> out of each element for which <i>pred</i> returns non-zero.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="limit_mag.html">BOOST_PP_LIMIT_MAG</a></li>
<li><a href="set_filter.html">BOOST_PP_SET_FILTER</a></li>
<li>
<a href="limit_mag.html">BOOST_PP_LIMIT_MAG</a></li>
<li>
<a href="seq_filter.html">BOOST_PP_SEQ_FILTER</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/filter.hpp.html">&lt;boost/preprocessor/set/filter.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/filter.hpp.html">&lt;boost/preprocessor/seq/filter.hpp&gt;</a>
</div>
</body>
</html>

View File

@ -1,17 +1,22 @@
<html>
<head>
<title>BOOST_PP_SET_FIRST_N</title>
<title>BOOST_PP_SEQ_FIRST_N</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FIRST_N</b> macro expands to a <i>set</i> of the first <i>n</i> elements of a <i>set</i>.
The <b>BOOST_PP_SEQ_FIRST_N</b> macro expands to a <i>seq</i> of the first <i>n</i>
elements of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FIRST_N</b>(<i>n</i>, <i>list</i>)
<b>BOOST_PP_SEQ_FIRST_N</b>(<i>n</i>, <i>list</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>n</dt>
<dd>
@ -19,28 +24,40 @@
</dd>
<dt>list</dt>
<dd>
The <i>set</i> from which the elements are extracted.
The <i>seq</i> from which the elements are extracted.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro extracts <i>n</i> elements from the beginning of <i>set</i> and returns them as a new <i>set</i>
This macro extracts <i>n</i> elements from the beginning of <i>seq</i> and
returns them as a new <i>seq</i>
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_rest_n.html">BOOST_PP_SET_REST_N</a></li>
<li>
<a href="seq_rest_n.html">BOOST_PP_SEQ_REST_N</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/first_n.hpp.html">&lt;boost/preprocessor/set/first_n.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/first_n.hpp.html">&lt;boost/preprocessor/seq/first_n.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/first_n.hpp.html">boost/preprocessor/set/first_n.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/first_n.hpp.html">boost/preprocessor/seq/first_n.hpp</a>&gt;
#define SET (a)(b)(c)(d)(e)
#define SEQ (a)(b)(c)(d)(e)
<a href="set_first_n.html">BOOST_PP_SET_FIRST_N</a>(2, SET) // expands to (a)(b)
</pre></div>
<a href="seq_first_n.html">BOOST_PP_SEQ_FIRST_N</a>(2, SEQ) // expands to (a)(b)
</pre>
</div>
</body>
</html>

View File

@ -1,62 +1,79 @@
<html>
<head>
<title>BOOST_PP_SET_FOLD_LEFT</title>
<title>BOOST_PP_SEQ_FOLD_LEFT</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FOLD_LEFT</b> macro folds (or accumulates) the elements of a <i>set</i> left-to-right.
The <b>BOOST_PP_SEQ_FOLD_LEFT</b> macro folds (or accumulates) the elements of
a <i>seq</i> left-to-right.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FOLD_LEFT</b>(<i>op</i>, <i>state</i>, <i>set</i>)
<b>BOOST_PP_SEQ_FOLD_LEFT</b>(<i>op</i>, <i>state</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>op</dt>
<dd>
A ternary operation of the form <i>op</i>(<i>s</i>, <i>state</i>, <i>elem</i>).&nbsp;
This macro is called for each element in <i>set</i>--each time returning a new <i>state</i>.&nbsp;
This operation is expanded by <b>BOOST_PP_SET_FOLD_LEFT</b> with the next available fold step,
the current <i>state</i>, and the current element.
This macro is called for each element in <i>seq</i>--each time returning a new <i>state</i>.&nbsp;
This operation is expanded by <b>BOOST_PP_SEQ_FOLD_LEFT</b> with the next
available fold step, the current <i>state</i>, and the current element.
</dd>
<dt>state</dt>
<dd>
The initial state of the fold.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be folded.
The <i>seq</i> to be folded.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
For the <i>set</i>, (<i>0</i>)(<i>1</i>)(<i>2</i>), this macro expands to:
For the <i>seq</i>, (<i>0</i>)(<i>1</i>)(<i>2</i>), this macro expands to:
<div>
<i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>state</i>, <i>0</i>), <i>1</i>), <i>2</i>)
<i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>state</i>, <i>0</i>),
<i>1</i>), <i>2</i>)
</div>
</div>
<div>
For maximum efficiency, <b>BOOST_PP_SET_FOLD_LEFT</b> can be reentered with <b>BOOST_PP_SET_FOLD_LEFT_<i>s</i></b>.
For maximum efficiency, <b>BOOST_PP_SEQ_FOLD_LEFT</b> can be reentered with <b>BOOST_PP_SEQ_FOLD_LEFT_<i>s</i></b>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_fold_left_s.html">BOOST_PP_SET_FOLD_LEFT_<i>s</i></a></li>
<li>
<a href="seq_fold_left_s.html">BOOST_PP_SEQ_FOLD_LEFT_<i>s</i></a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/fold_left.hpp.html">&lt;boost/preprocessor/set/fold_left.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/fold_left.hpp.html">&lt;boost/preprocessor/seq/fold_left.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/cat.hpp.html">boost/preprocessor/cat.hpp</a>&gt;
#include &lt;<a href="../headers/set/fold_left.hpp.html">boost/preprocessor/set/fold_left.hpp</a>&gt;
#include &lt;<a href="../headers/seq/fold_left.hpp.html">boost/preprocessor/seq/fold_left.hpp</a>&gt;
#define SET (b)(o)(o)(s)(t)
#define SEQ (b)(o)(o)(s)(t)
#define OP(s, state, x) <a href="cat.html">BOOST_PP_CAT</a>(state, x)
<a href="set_fold_left.html">BOOST_PP_SET_FOLD_LEFT</a>(OP, <a href="set_head.html">BOOST_PP_SET_HEAD</a>(SET), <a href="set_tail.html">BOOST_PP_SET_TAIL</a>(SET)) // expands to boost
</pre></div>
<a href="seq_fold_left.html">BOOST_PP_SEQ_FOLD_LEFT</a>(OP, <a href="seq_head.html">BOOST_PP_SEQ_HEAD</a>(SEQ), <a href="seq_tail.html">BOOST_PP_SEQ_TAIL</a>(SEQ)) // expands to boost
</pre>
</div>
</body>
</html>

View File

@ -1,68 +1,85 @@
<html>
<head>
<title>BOOST_PP_SET_FOLD_LEFT_s</title>
<title>BOOST_PP_SEQ_FOLD_LEFT_s</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FOLD_LEFT_<i>s</i></b> macro folds (or accumulates) the elements of a <i>set</i> left-to-right.&nbsp;
It reenters <b>BOOST_PP_SET_FOLD_LEFT</b> with maximum efficiency.
The <b>BOOST_PP_SEQ_FOLD_LEFT_<i>s</i></b> macro folds (or accumulates) the
elements of a <i>seq</i> left-to-right.&nbsp; It reenters <b>BOOST_PP_SEQ_FOLD_LEFT</b>
with maximum efficiency.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FOLD_LEFT_</b> ## <i>s</i>(<i>op</i>, <i>state</i>, <i>set</i>)
<b>BOOST_PP_SEQ_FOLD_LEFT_</b> ## <i>s</i>(<i>op</i>, <i>state</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>s</dt>
<dd>
The next available <b>BOOST_PP_SET_FOLD_LEFT</b> fold step.
The next available <b>BOOST_PP_SEQ_FOLD_LEFT</b> fold step.
</dd>
<dt>op</dt>
<dd>
A ternary operation of the form <i>op</i>(<i>s</i>, <i>state</i>, <i>elem</i>).&nbsp;
This macro is called for each element in <i>set</i>--each time returning a new <i>state</i>.&nbsp;
This operation is expanded by <b>BOOST_PP_SET_FOLD_LEFT</b> with the next available fold step,
the current <i>state</i>, and the current element.
This macro is called for each element in <i>seq</i>--each time returning a new <i>state</i>.&nbsp;
This operation is expanded by <b>BOOST_PP_SEQ_FOLD_LEFT</b> with the next
available fold step, the current <i>state</i>, and the current element.
</dd>
<dt>state</dt>
<dd>
The initial state of the fold.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be folded.
The <i>seq</i> to be folded.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
For the <i>set</i>, (<i>0</i>)(<i>1</i>)(<i>2</i>), this macro expands to:
For the <i>seq</i>, (<i>0</i>)(<i>1</i>)(<i>2</i>), this macro expands to:
<div>
<i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>state</i>, <i>0</i>), <i>1</i>), <i>2</i>)
<i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>state</i>, <i>0</i>),
<i>1</i>), <i>2</i>)
</div>
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_fold_left.html">BOOST_PP_SET_FOLD_LEFT</a></li>
<li>
<a href="seq_fold_left.html">BOOST_PP_SEQ_FOLD_LEFT</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/fold_left.hpp.html">&lt;boost/preprocessor/set/fold_left.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/fold_left.hpp.html">&lt;boost/preprocessor/seq/fold_left.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/cat.hpp.html">boost/preprocessor/cat.hpp</a>&gt;
#include &lt;<a href="../headers/set/fold_left.hpp.html">boost/preprocessor/set/fold_left.hpp</a>&gt;
#include &lt;<a href="../headers/set/set.hpp.html">boost/preprocessor/set/set.hpp</a>&gt;
#include &lt;<a href="../headers/seq/fold_left.hpp.html">boost/preprocessor/seq/fold_left.hpp</a>&gt;
#include &lt;<a href="../headers/seq/seq.hpp.html">boost/preprocessor/seq/seq.hpp</a>&gt;
#define S1 (a)(b)(c)
#define S2 (S1)(S1)(S1)
#define OP(s, state, x) state (<a href="set_fold_left_s.html">BOOST_PP_SET_FOLD_LEFT_</a> ## s(OP_2, _, x))
#define OP(s, state, x) state (<a href="seq_fold_left_s.html">BOOST_PP_SEQ_FOLD_LEFT_</a> ## s(OP_2, _, x))
#define OP_2(s, state, x) <a href="cat.html">BOOST_PP_CAT</a>(state, x)
<a href="set_fold_left.html">BOOST_PP_SET_FOLD_LEFT</a>(OP, <a href="set_nil.html">BOOST_PP_SET_NIL</a>, S2)
<a href="seq_fold_left.html">BOOST_PP_SEQ_FOLD_LEFT</a>(OP, <a href="seq_nil.html">BOOST_PP_SEQ_NIL</a>, S2)
// expands to (_abc)(_abc)(_abc)
</pre></div>
</pre>
</div>
</body>
</html>

View File

@ -1,64 +1,81 @@
<html>
<head>
<title>BOOST_PP_SET_FOLD_RIGHT</title>
<title>BOOST_PP_SEQ_FOLD_RIGHT</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FOLD_RIGHT</b> macro folds (or accumulates) the elements of a <i>set</i> right-to-left.
The <b>BOOST_PP_SEQ_FOLD_RIGHT</b> macro folds (or accumulates) the elements of
a <i>seq</i> right-to-left.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FOLD_RIGHT</b>(<i>op</i>, <i>state</i>, <i>set</i>)
<b>BOOST_PP_SEQ_FOLD_RIGHT</b>(<i>op</i>, <i>state</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>op</dt>
<dd>
A ternary operation of the form <i>op</i>(<i>s</i>, <i>state</i>, <i>elem</i>).&nbsp;
This macro is called for each element in <i>set</i>--each time returning a new <i>state</i>.&nbsp;
This operation is expanded by <b>BOOST_PP_SET_FOLD_RIGHT</b> with the next available fold step,
the current <i>state</i>, and the current element.
This macro is called for each element in <i>seq</i>--each time returning a new <i>state</i>.&nbsp;
This operation is expanded by <b>BOOST_PP_SEQ_FOLD_RIGHT</b> with the next
available fold step, the current <i>state</i>, and the current element.
</dd>
<dt>state</dt>
<dd>
The initial state of the fold.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be folded.
The <i>seq</i> to be folded.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
For the <i>set</i>, (<i>0</i>)(<i>1</i>)(<i>2</i>), this macro expands to:
For the <i>seq</i>, (<i>0</i>)(<i>1</i>)(<i>2</i>), this macro expands to:
<div>
<i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>state</i>, <i>2</i>), <i>1</i>), <i>0</i>)
<i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>state</i>, <i>2</i>),
<i>1</i>), <i>0</i>)
</div>
</div>
<div>
For maximum efficiency, <b>BOOST_PP_SET_FOLD_RIGHT</b> can be reentered with <b>BOOST_PP_SET_FOLD_RIGHT_<i>s</i></b>.
For maximum efficiency, <b>BOOST_PP_SEQ_FOLD_RIGHT</b> can be reentered with <b>BOOST_PP_SEQ_FOLD_RIGHT_<i>s</i></b>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_fold_right_s.html">BOOST_PP_SET_FOLD_RIGHT_<i>s</i></a></li>
<li>
<a href="seq_fold_right_s.html">BOOST_PP_SEQ_FOLD_RIGHT_<i>s</i></a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/fold_right.hpp.html">&lt;boost/preprocessor/set/fold_right.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/fold_right.hpp.html">&lt;boost/preprocessor/seq/fold_right.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/cat.hpp.html">boost/preprocessor/cat.hpp</a>&gt;
#include &lt;<a href="../headers/set/elem.hpp.html">boost/preprocessor/set/elem.hpp</a>&gt;
#include &lt;<a href="../headers/set/fold_right.hpp.html">boost/preprocessor/set/fold_right.hpp</a>&gt;
#include &lt;<a href="../headers/set/pop_back.hpp.html">boost/preprocessor/set/pop_back.hpp</a>&gt;
#include &lt;<a href="../headers/seq/elem.hpp.html">boost/preprocessor/seq/elem.hpp</a>&gt;
#include &lt;<a href="../headers/seq/fold_right.hpp.html">boost/preprocessor/seq/fold_right.hpp</a>&gt;
#include &lt;<a href="../headers/seq/pop_back.hpp.html">boost/preprocessor/seq/pop_back.hpp</a>&gt;
#define SET (t)(s)(o)(o)(b)
#define SEQ (t)(s)(o)(o)(b)
#define OP(s, state, x) <a href="cat.html">BOOST_PP_CAT</a>(state, x)
<a href="set_fold_right.html">BOOST_PP_SET_FOLD_RIGHT</a>(OP, <a href="set_elem.html">BOOST_PP_SET_ELEM</a>(4, SET), <a href="set_pop_back.html">BOOST_PP_SET_POP_BACK</a>(SET)) // expands to boost
</pre></div>
<a href="seq_fold_right.html">BOOST_PP_SEQ_FOLD_RIGHT</a>(OP, <a href="seq_elem.html">BOOST_PP_SEQ_ELEM</a>(4, SEQ), <a href="seq_pop_back.html">BOOST_PP_SEQ_POP_BACK</a>(SEQ)) // expands to boost
</pre>
</div>
</body>
</html>

View File

@ -1,69 +1,86 @@
<html>
<head>
<title>BOOST_PP_SET_FOLD_RIGHT_s</title>
<title>BOOST_PP_SEQ_FOLD_RIGHT_s</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FOLD_RIGHT_<i>s</i></b> macro folds (or accumulates) the elements of a <i>set</i> right-to-left.&nbsp;
It reenters <b>BOOST_PP_SET_FOLD_RIGHT</b> with maximum efficiency.
The <b>BOOST_PP_SEQ_FOLD_RIGHT_<i>s</i></b> macro folds (or accumulates) the
elements of a <i>seq</i> right-to-left.&nbsp; It reenters <b>BOOST_PP_SEQ_FOLD_RIGHT</b>
with maximum efficiency.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FOLD_RIGHT_</b> ## <i>s</i>(<i>op</i>, <i>state</i>, <i>set</i>)
<b>BOOST_PP_SEQ_FOLD_RIGHT_</b> ## <i>s</i>(<i>op</i>, <i>state</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>s</dt>
<dd>
The next available <b>BOOST_PP_SET_FOLD_LEFT</b> fold step.
The next available <b>BOOST_PP_SEQ_FOLD_LEFT</b> fold step.
</dd>
<dt>op</dt>
<dd>
A ternary operation of the form <i>op</i>(<i>s</i>, <i>state</i>, <i>elem</i>).&nbsp;
This macro is called for each element in <i>set</i>--each time returning a new <i>state</i>.&nbsp;
This operation is expanded by <b>BOOST_PP_SET_FOLD_RIGHT</b> with the next available fold step,
the current <i>state</i>, and the current element.
This macro is called for each element in <i>seq</i>--each time returning a new <i>state</i>.&nbsp;
This operation is expanded by <b>BOOST_PP_SEQ_FOLD_RIGHT</b> with the next
available fold step, the current <i>state</i>, and the current element.
</dd>
<dt>state</dt>
<dd>
The initial state of the fold.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be folded.
The <i>seq</i> to be folded.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
For the <i>set</i>, (<i>0</i>)(<i>1</i>)(<i>2</i>), this macro expands to:
For the <i>seq</i>, (<i>0</i>)(<i>1</i>)(<i>2</i>), this macro expands to:
<div>
<i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>state</i>, <i>2</i>), <i>1</i>), <i>0</i>)
<i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>op</i>(<i>s</i>, <i>state</i>, <i>2</i>),
<i>1</i>), <i>0</i>)
</div>
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_fold_right.html">BOOST_PP_SET_FOLD_RIGHT</a></li>
<li>
<a href="seq_fold_right.html">BOOST_PP_SEQ_FOLD_RIGHT</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/fold_right.hpp.html">&lt;boost/preprocessor/set/fold_right.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/fold_right.hpp.html">&lt;boost/preprocessor/seq/fold_right.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/cat.hpp.html">boost/preprocessor/cat.hpp</a>&gt;
#include &lt;<a href="../headers/set/fold_left.hpp.html">boost/preprocessor/set/fold_left.hpp</a>&gt;
#include &lt;<a href="../headers/set/fold_right.hpp.html">boost/preprocessor/set/fold_right.hpp</a>&gt;
#include &lt;<a href="../headers/set/set.hpp.html">boost/preprocessor/set/set.hpp</a>&gt;
#include &lt;<a href="../headers/seq/fold_left.hpp.html">boost/preprocessor/seq/fold_left.hpp</a>&gt;
#include &lt;<a href="../headers/seq/fold_right.hpp.html">boost/preprocessor/seq/fold_right.hpp</a>&gt;
#include &lt;<a href="../headers/seq/seq.hpp.html">boost/preprocessor/seq/seq.hpp</a>&gt;
#define S1 (a)(b)(c)
#define S2 (S1)(S1)(S1)
#define OP(s, state, x) state (<a href="set_fold_left_s.html">BOOST_PP_SET_FOLD_RIGHT_</a> ## s(OP_2, _, x))
#define OP(s, state, x) state (<a href="seq_fold_left_s.html">BOOST_PP_SEQ_FOLD_RIGHT_</a> ## s(OP_2, _, x))
#define OP_2(s, state, x) <a href="cat.html">BOOST_PP_CAT</a>(state, x)
<a href="set_fold_left.html">BOOST_PP_SET_FOLD_LEFT</a>(OP, <a href="set_nil.html">BOOST_PP_SET_NIL</a>, S2)
<a href="seq_fold_left.html">BOOST_PP_SEQ_FOLD_LEFT</a>(OP, <a href="seq_nil.html">BOOST_PP_SEQ_NIL</a>, S2)
// expands to (_cba)(_cba)(_cba)
</pre></div>
</pre>
</div>
</body>
</html>

View File

@ -1,62 +1,79 @@
<html>
<head>
<title>BOOST_PP_SET_FOR_EACH</title>
<title>BOOST_PP_SEQ_FOR_EACH</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FOR_EACH</b> macro repeats a macro for each element in a <i>set</i>.
The <b>BOOST_PP_SEQ_FOR_EACH</b> macro repeats a macro for each element in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FOR_EACH</b>(<i>macro</i>, <i>data</i>, <i>set</i>)
<b>BOOST_PP_SEQ_FOR_EACH</b>(<i>macro</i>, <i>data</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>macro</dt>
<dd>
A ternary macro of the form <i>macro</i>(<i>r</i>, <i>data</i>, <i>elem</i>).&nbsp;
This macro is expanded by <b>BOOST_PP_SET_FOR_EACH</b> with each element in <i>set</i>.&nbsp;
It is expanded with the next available <b>BOOST_PP_FOR</b> repetition, the auxiliary <i>data</i>, and the current element.
This macro is expanded by <b>BOOST_PP_SEQ_FOR_EACH</b> with each element in <i>seq</i>.&nbsp;
It is expanded with the next available <b>BOOST_PP_FOR</b> repetition, the
auxiliary <i>data</i>, and the current element.
</dd>
<dt>data</dt>
<dd>
Auxiliary data passed to <i>macro</i>.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> for which <i>macro</i> will be invoked on each element.
The <i>seq</i> for which <i>macro</i> will be invoked on each element.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro is a repetition construct.&nbsp;
If <i>set</i> is (<i>a</i>)(<i>b</i>)(<i>c</i>), it expands to the sequence:
This macro is a repetition construct.&nbsp; If <i>seq</i> is (<i>a</i>)(<i>b</i>)(<i>c</i>),
it expands to the sequence:
<div>
<i>macro</i>(<i>r</i>, <i>data</i>, <i>a</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>b</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>c</i>)
<i>macro</i>(<i>r</i>, <i>data</i>, <i>a</i>) <i>macro</i>(<i>r</i>, <i>data</i>,
<i>b</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>c</i>)
</div>
</div>
<div>
For maximum efficiency, use <b>BOOST_PP_SET_FOR_EACH_R</b>.
For maximum efficiency, use <b>BOOST_PP_SEQ_FOR_EACH_R</b>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_for_each_r.html">BOOST_PP_SET_FOR_EACH_R</a></li>
<li>
<a href="seq_for_each_r.html">BOOST_PP_SEQ_FOR_EACH_R</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/for_each.hpp.html">&lt;boost/preprocessor/set/for_each.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/for_each.hpp.html">&lt;boost/preprocessor/seq/for_each.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/cat.hpp.html">boost/preprocessor/cat.hpp</a>&gt;
#include &lt;<a href="../headers/set/for_each.hpp.html">boost/preprocessor/set/for_each.hpp</a>&gt;
#include &lt;<a href="../headers/seq/for_each.hpp.html">boost/preprocessor/seq/for_each.hpp</a>&gt;
#define SET (w)(x)(y)(z)
#define SEQ (w)(x)(y)(z)
#define MACRO(r, data, elem) <a href="cat.html">BOOST_PP_CAT</a>(elem, data)
<a href="set_for_each.html">BOOST_PP_SET_FOR_EACH</a>(MACRO, _, SET) // expands to w_ x_ y_ z_
</pre></div>
<a href="seq_for_each.html">BOOST_PP_SEQ_FOR_EACH</a>(MACRO, _, SEQ) // expands to w_ x_ y_ z_
</pre>
</div>
</body>
</html>

View File

@ -1,62 +1,80 @@
<html>
<head>
<title>BOOST_PP_SET_FOR_EACH_I</title>
<title>BOOST_PP_SEQ_FOR_EACH_I</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FOR_EACH_I</b> macro repeats a macro for each element in a <i>set</i>.
The <b>BOOST_PP_SEQ_FOR_EACH_I</b> macro repeats a macro for each element in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FOR_EACH_I</b>(<i>macro</i>, <i>data</i>, <i>set</i>)
<b>BOOST_PP_SEQ_FOR_EACH_I</b>(<i>macro</i>, <i>data</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>macro</dt>
<dd>
A macro of the form <i>macro</i>(<i>r</i>, <i>data</i>, <i>i</i>, <i>elem</i>).&nbsp;
This macro is expanded by <b>BOOST_PP_SET_FOR_EACH_I</b> with each element in <i>set</i>.&nbsp;
It is expanded with the next available <b>BOOST_PP_FOR</b> repetition, the auxiliary <i>data</i>, the index of the current element, and the current element.
This macro is expanded by <b>BOOST_PP_SEQ_FOR_EACH_I</b> with each element in <i>seq</i>.&nbsp;
It is expanded with the next available <b>BOOST_PP_FOR</b> repetition, the
auxiliary <i>data</i>, the index of the current element, and the current
element.
</dd>
<dt>data</dt>
<dd>
Auxiliary data passed to <i>macro</i>.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> for which <i>macro</i> will be invoked on each element.
The <i>seq</i> for which <i>macro</i> will be invoked on each element.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro is a repetition construct.&nbsp;
If <i>set</i> is (<i>a</i>)(<i>b</i>)(<i>c</i>), it expands to the sequence:
This macro is a repetition construct.&nbsp; If <i>seq</i> is (<i>a</i>)(<i>b</i>)(<i>c</i>),
it expands to the sequence:
<div>
<i>macro</i>(<i>r</i>, <i>data</i>, <i>0</i>, <i>a</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>1</i>, <i>b</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>2</i>, <i>c</i>)
<i>macro</i>(<i>r</i>, <i>data</i>, <i>0</i>, <i>a</i>) <i>macro</i>(<i>r</i>, <i>data</i>,
<i>1</i>, <i>b</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>2</i>, <i>c</i>)
</div>
</div>
<div>
For maximum efficiency, use <b>BOOST_PP_SET_FOR_EACH_I_R</a></li>
For maximum efficiency, use <b>BOOST_PP_SEQ_FOR_EACH_I_R</a></li>
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_for_each_i_r.html">BOOST_PP_SET_FOR_EACH_I_R</a></li>
<li>
<a href="seq_for_each_i_r.html">BOOST_PP_SEQ_FOR_EACH_I_R</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/for_each_i.hpp.html">&lt;boost/preprocessor/set/for_each_i.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/for_each_i.hpp.html">&lt;boost/preprocessor/seq/for_each_i.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/cat.hpp.html">boost/preprocessor/cat.hpp</a>&gt;
#include &lt;<a href="../headers/set/for_each_i.hpp.html">boost/preprocessor/set/for_each_i.hpp</a>&gt;
#include &lt;<a href="../headers/seq/for_each_i.hpp.html">boost/preprocessor/seq/for_each_i.hpp</a>&gt;
#define SET (a)(b)(c)(d)
#define SEQ (a)(b)(c)(d)
#define MACRO(r, data, i, elem) <a href="cat.html">BOOST_PP_CAT</a>(elem, <a href="cat.html">BOOST_PP_CAT</a>(data, i))
<a href="set_for_each_i.html">BOOST_PP_SET_FOR_EACH_I</a>(MACRO, _, SET) // expands to a_0 b_1 c_2 d_3
</pre></div>
<a href="seq_for_each_i.html">BOOST_PP_SEQ_FOR_EACH_I</a>(MACRO, _, SEQ) // expands to a_0 b_1 c_2 d_3
</pre>
</div>
</body>
</html>

View File

@ -1,18 +1,22 @@
<html>
<head>
<title>BOOST_PP_SET_FOR_EACH_I_R</title>
<title>BOOST_PP_SEQ_FOR_EACH_I_R</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FOR_EACH_I_R</b> macro repeats a macro for each element in a <i>set</i>.&nbsp;
It reenters <b>BOOST_PP_FOR</b> with maximum efficiency.
The <b>BOOST_PP_SEQ_FOR_EACH_I_R</b> macro repeats a macro for each element in
a <i>seq</i>.&nbsp; It reenters <b>BOOST_PP_FOR</b> with maximum efficiency.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FOR_EACH_I_R</b>(<i>r</i>, <i>macro</i>, <i>data</i>, <i>set</i>)
<b>BOOST_PP_SEQ_FOR_EACH_I_R</b>(<i>r</i>, <i>macro</i>, <i>data</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>r</dt>
<dd>
@ -21,33 +25,43 @@
<dt>macro</dt>
<dd>
A macro of the form <i>macro</i>(<i>r</i>, <i>data</i>, <i>i</i>, <i>elem</i>).&nbsp;
This macro is expanded by <b>BOOST_PP_SET_FOR_EACH_I</b> with each element in <i>set</i>.&nbsp;
It is expanded with the next available <b>BOOST_PP_FOR</b> repetition, the auxiliary <i>data</i>, the index of the current element, and the current element.
This macro is expanded by <b>BOOST_PP_SEQ_FOR_EACH_I</b> with each element in <i>seq</i>.&nbsp;
It is expanded with the next available <b>BOOST_PP_FOR</b> repetition, the
auxiliary <i>data</i>, the index of the current element, and the current
element.
</dd>
<dt>data</dt>
<dd>
Auxiliary data passed to <i>macro</i>.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> for which <i>macro</i> will be invoked on each element.
The <i>seq</i> for which <i>macro</i> will be invoked on each element.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro is a repetition construct.&nbsp;
If <i>set</i> is (<i>a</i>)(<i>b</i>)(<i>c</i>), it expands to the sequence:
This macro is a repetition construct.&nbsp; If <i>seq</i> is (<i>a</i>)(<i>b</i>)(<i>c</i>),
it expands to the sequence:
<div>
<i>macro</i>(<i>r</i>, <i>data</i>, <i>0</i>, <i>a</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>1</i>, <i>b</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>2</i>, <i>c</i>)
<i>macro</i>(<i>r</i>, <i>data</i>, <i>0</i>, <i>a</i>) <i>macro</i>(<i>r</i>, <i>data</i>,
<i>1</i>, <i>b</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>2</i>, <i>c</i>)
</div>
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_for_each_i.html">BOOST_PP_SET_FOR_EACH_I</a></li>
<li>
<a href="seq_for_each_i.html">BOOST_PP_SEQ_FOR_EACH_I</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/for_each_i.hpp.html">&lt;boost/preprocessor/set/for_each_i.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/for_each_i.hpp.html">&lt;boost/preprocessor/seq/for_each_i.hpp&gt;</a>
</div>
</body>
</html>

View File

@ -1,73 +1,89 @@
<html>
<head>
<title>BOOST_PP_SET_FOR_EACH_PRODUCT</title>
<title>BOOST_PP_SEQ_FOR_EACH_PRODUCT</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FOR_EACH_PRODUCT</b> macro repeats a macro for each cartesian product of several <i>sets</i>.
The <b>BOOST_PP_SEQ_FOR_EACH_PRODUCT</b> macro repeats a macro for each
cartesian product of several <i>seqs</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FOR_EACH_PRODUCT</b>(<i>macro</i>, <i>sets</i>)
<b>BOOST_PP_SEQ_FOR_EACH_PRODUCT</b>(<i>macro</i>, <i>seqs</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>macro</dt>
<dd>
The binary macro of the form <i>macro</i>(<i>r</i>, <i>product</i>).&nbsp;
This macro is expanded by <b>BOOST_PP_FOR_EACH_PRODUCT</b> with each cartesian product in <i>sets</i>.&nbsp;
It is expanded with the next available <b>BOOST_PP_FOR</b> repetition and a <i>set</i> containing a cartesian product.&nbsp;
The binary macro of the form <i>macro</i>(<i>r</i>, <i>product</i>).&nbsp; This
macro is expanded by <b>BOOST_PP_FOR_EACH_PRODUCT</b> with each cartesian
product in <i>seqs</i>.&nbsp; It is expanded with the next available <b>BOOST_PP_FOR</b>
repetition and a <i>seq</i> containing a cartesian product.&nbsp;
</dd>
<dt>sets</dt>
<dt>seqs</dt>
<dd>
A <i>set</i> of <i>sets</i> from which cartesian products are obtained.
A <i>seq</i> of <i>seqs</i> from which cartesian products are obtained.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro is a repetition construct.&nbsp;
If two <i>sets</i> are (<i>a</i>)(<i>b</i>)(<i>c</i>) and (<i>x</i>)(<i>y</i>)(<i>z</i>),
this macro will produce the following sequence:
This macro is a repetition construct.&nbsp; If two <i>seqs</i> are (<i>a</i>)(<i>b</i>)(<i>c</i>)
and (<i>x</i>)(<i>y</i>)(<i>z</i>), this macro will produce the following
sequence:
<div>
<i>macro</i>(<i>r</i>, (<i>a</i>)(<i>x</i>))
<i>macro</i>(<i>r</i>, (<i>a</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>a</i>)(<i>z</i>)) \<br>
<i>macro</i>(<i>r</i>, (<i>b</i>)(<i>x</i>))
<i>macro</i>(<i>r</i>, (<i>b</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>b</i>)(<i>z</i>)) \<br>
<i>macro</i>(<i>r</i>, (<i>c</i>)(<i>x</i>))
<i>macro</i>(<i>r</i>, (<i>c</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>a</i>)(<i>x</i>)) <i>macro</i>(<i>r</i>, (<i>a</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>a</i>)(<i>z</i>)) \
<br>
<i>macro</i>(<i>r</i>, (<i>b</i>)(<i>x</i>)) <i>macro</i>(<i>r</i>, (<i>b</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>b</i>)(<i>z</i>)) \
<br>
<i>macro</i>(<i>r</i>, (<i>c</i>)(<i>x</i>)) <i>macro</i>(<i>r</i>, (<i>c</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>c</i>)(<i>z</i>))
</div>
</div>
<div>
For maximum efficiency, use <b>BOOST_PP_SET_FOR_EACH_PRODUCT_R</b>.
For maximum efficiency, use <b>BOOST_PP_SEQ_FOR_EACH_PRODUCT_R</b>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_for_each_product_r.html">BOOST_PP_SET_FOR_EACH_PRODUCT_R</a></li>
<li>
<a href="seq_for_each_product_r.html">BOOST_PP_SEQ_FOR_EACH_PRODUCT_R</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/for_each_product.hpp.html">&lt;boost/preprocessor/set/for_each_product.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/for_each_product.hpp.html">&lt;boost/preprocessor/seq/for_each_product.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/for_each_product.hpp.html">boost/preprocessor/set/for_each_product.hpp</a>&gt;
#include &lt;<a href="../headers/set/to_tuple.hpp.html">boost/preprocessor/set/to_tuple.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/for_each_product.hpp.html">boost/preprocessor/seq/for_each_product.hpp</a>&gt;
#include &lt;<a href="../headers/seq/to_tuple.hpp.html">boost/preprocessor/seq/to_tuple.hpp</a>&gt;
#define S1 (a)(b)(c)
#define S2 (x)(y)(z)
#define S3 (p)(q)
#define MACRO(r, product) <a href="set_to_tuple.html">BOOST_PP_SET_TO_TUPLE</a>(product)
#define MACRO(r, product) <a href="seq_to_tuple.html">BOOST_PP_SEQ_TO_TUPLE</a>(product)
<a href="set_for_each_product.html">BOOST_PP_SET_FOR_EACH_PRODUCT</a>(MACRO, (S1)(S2)(S3))
<a href="seq_for_each_product.html">BOOST_PP_SEQ_FOR_EACH_PRODUCT</a>(MACRO, (S1)(S2)(S3))
// expands to:
// (a, x, p) (a, x, q) (a, y, p) (a, y, q) (a, z, p) (a, z, q)
// (b, x, p) (b, x, q) (b, y, p) (b, y, q) (b, z, p) (b, z, q)
// (c, x, p) (c, x, q) (c, y, p) (c, y, q) (c, z, p) (c, z, q)
</pre></div>
</pre>
</div>
</body>
</html>

View File

@ -1,18 +1,23 @@
<html>
<head>
<title>BOOST_PP_SET_FOR_EACH_PRODUCT_R</title>
<title>BOOST_PP_SEQ_FOR_EACH_PRODUCT_R</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FOR_EACH_PRODUCT_R</b> macro repeats a macro for each cartesian product of several <i>sets</i>.&nbsp;
It reenters <b>BOOST_PP_FOR</b> with maximum efficiency.
The <b>BOOST_PP_SEQ_FOR_EACH_PRODUCT_R</b> macro repeats a macro for each
cartesian product of several <i>seqs</i>.&nbsp; It reenters <b>BOOST_PP_FOR</b>
with maximum efficiency.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FOR_EACH_PRODUCT_R</b>(<i>r</i>, <i>macro</i>, <i>sets</i>)
<b>BOOST_PP_SEQ_FOR_EACH_PRODUCT_R</b>(<i>r</i>, <i>macro</i>, <i>seqs</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>r</dt>
<dd>
@ -20,39 +25,46 @@
</dd>
<dt>macro</dt>
<dd>
The binary macro of the form <i>macro</i>(<i>r</i>, <i>product</i>).&nbsp;
This macro is expanded by <b>BOOST_PP_FOR_EACH_PRODUCT</b> with each cartesian product in <i>sets</i>.&nbsp;
It is expanded with the next available <b>BOOST_PP_FOR</b> repetition and a <i>set</i> containing a cartesian product.&nbsp;
The binary macro of the form <i>macro</i>(<i>r</i>, <i>product</i>).&nbsp; This
macro is expanded by <b>BOOST_PP_FOR_EACH_PRODUCT</b> with each cartesian
product in <i>seqs</i>.&nbsp; It is expanded with the next available <b>BOOST_PP_FOR</b>
repetition and a <i>seq</i> containing a cartesian product.&nbsp;
</dd>
<dt>sets</dt>
<dt>seqs</dt>
<dd>
A <i>set</i> of <i>sets</i> from which cartesian products are obtained.
A <i>seq</i> of <i>seqs</i> from which cartesian products are obtained.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro is a repetition construct.&nbsp;
If two <i>sets</i> are (<i>a</i>)(<i>b</i>)(<i>c</i>) and (<i>x</i>)(<i>y</i>)(<i>z</i>),
this macro will produce the following sequence:
This macro is a repetition construct.&nbsp; If two <i>seqs</i> are (<i>a</i>)(<i>b</i>)(<i>c</i>)
and (<i>x</i>)(<i>y</i>)(<i>z</i>), this macro will produce the following
sequence:
<div>
<i>macro</i>(<i>r</i>, (<i>a</i>)(<i>x</i>))
<i>macro</i>(<i>r</i>, (<i>a</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>a</i>)(<i>z</i>)) \<br>
<i>macro</i>(<i>r</i>, (<i>b</i>)(<i>x</i>))
<i>macro</i>(<i>r</i>, (<i>b</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>b</i>)(<i>z</i>)) \<br>
<i>macro</i>(<i>r</i>, (<i>c</i>)(<i>x</i>))
<i>macro</i>(<i>r</i>, (<i>c</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>a</i>)(<i>x</i>)) <i>macro</i>(<i>r</i>, (<i>a</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>a</i>)(<i>z</i>)) \
<br>
<i>macro</i>(<i>r</i>, (<i>b</i>)(<i>x</i>)) <i>macro</i>(<i>r</i>, (<i>b</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>b</i>)(<i>z</i>)) \
<br>
<i>macro</i>(<i>r</i>, (<i>c</i>)(<i>x</i>)) <i>macro</i>(<i>r</i>, (<i>c</i>)(<i>y</i>))
<i>macro</i>(<i>r</i>, (<i>c</i>)(<i>z</i>))
</div>
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_for_each_product.html">BOOST_PP_SET_FOR_EACH_PRODUCT</a></li>
<li>
<a href="seq_for_each_product.html">BOOST_PP_SEQ_FOR_EACH_PRODUCT</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/for_each_product.hpp.html">&lt;boost/preprocessor/set/for_each_product.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/for_each_product.hpp.html">&lt;boost/preprocessor/seq/for_each_product.hpp&gt;</a>
</div>
</body>
</html>

View File

@ -1,18 +1,22 @@
<html>
<head>
<title>BOOST_PP_SET_FOR_EACH_R</title>
<title>BOOST_PP_SEQ_FOR_EACH_R</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_FOR_EACH_R</b> macro repeats a macro for each element in a <i>set</i>.&nbsp;
The <b>BOOST_PP_SEQ_FOR_EACH_R</b> macro repeats a macro for each element in a <i>seq</i>.&nbsp;
It reenters <b>BOOST_PP_FOR</b> with maximum efficiency.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_FOR_EACH_R</b>(<i>r</i>, <i>macro</i>, <i>data</i>, <i>set</i>)
<b>BOOST_PP_SEQ_FOR_EACH_R</b>(<i>r</i>, <i>macro</i>, <i>data</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>r</dt>
<dd>
@ -21,33 +25,42 @@
<dt>macro</dt>
<dd>
A ternary macro of the form <i>macro</i>(<i>r</i>, <i>data</i>, <i>elem</i>).&nbsp;
This macro is expanded by <b>BOOST_PP_SET_FOR_EACH</b> with each element in <i>set</i>.&nbsp;
It is expanded with the next available <b>BOOST_PP_FOR</b> repetition, the auxiliary <i>data</i>, and the current element.
This macro is expanded by <b>BOOST_PP_SEQ_FOR_EACH</b> with each element in <i>seq</i>.&nbsp;
It is expanded with the next available <b>BOOST_PP_FOR</b> repetition, the
auxiliary <i>data</i>, and the current element.
</dd>
<dt>data</dt>
<dd>
Auxiliary data passed to <i>macro</i>.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> for which <i>macro</i> will be invoked on each element.
The <i>seq</i> for which <i>macro</i> will be invoked on each element.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro is a repetition construct.&nbsp;
If <i>set</i> is (<i>a</i>)(<i>b</i>)(<i>c</i>), it expands to the sequence:
This macro is a repetition construct.&nbsp; If <i>seq</i> is (<i>a</i>)(<i>b</i>)(<i>c</i>),
it expands to the sequence:
<div>
<i>macro</i>(<i>r</i>, <i>data</i>, <i>a</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>b</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>c</i>)
<i>macro</i>(<i>r</i>, <i>data</i>, <i>a</i>) <i>macro</i>(<i>r</i>, <i>data</i>,
<i>b</i>) <i>macro</i>(<i>r</i>, <i>data</i>, <i>c</i>)
</div>
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_for_each.html">BOOST_PP_SET_FOR_EACH</a></li>
<li>
<a href="seq_for_each.html">BOOST_PP_SEQ_FOR_EACH</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/for_each.hpp.html">&lt;boost/preprocessor/set/for_each.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/for_each.hpp.html">&lt;boost/preprocessor/seq/for_each.hpp&gt;</a>
</div>
</body>
</html>

View File

@ -1,39 +1,52 @@
<html>
<head>
<title>BOOST_PP_SET_HEAD</title>
<title>BOOST_PP_SEQ_HEAD</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_HEAD</b> macro expands to the first element in a <i>set</i>.
The <b>BOOST_PP_SEQ_HEAD</b> macro expands to the first element in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_HEAD</b>(<i>set</i>)
<b>BOOST_PP_SEQ_HEAD</b>(<i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> from which the first element is extracted.
The <i>seq</i> from which the first element is extracted.
</dd>
</dl>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_tail.html">BOOST_PP_SET_TAIL</a></li>
<li>
<a href="seq_tail.html">BOOST_PP_SEQ_TAIL</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/set.hpp.html">&lt;boost/preprocessor/set/set.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/seq.hpp.html">&lt;boost/preprocessor/seq/seq.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/set.hpp.html">boost/preprocessor/set/set.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/seq.hpp.html">boost/preprocessor/seq/seq.hpp</a>&gt;
#define SET (a)(b)(c)
#define SEQ (a)(b)(c)
<a href="set_head.html">BOOST_PP_SET_HEAD</a>(SET) // expands to a
<a href="set_tail.html">BOOST_PP_SET_TAIL</a>(SET) // expands to (b)(c)
</pre></div>
<a href="seq_head.html">BOOST_PP_SEQ_HEAD</a>(SEQ) // expands to a
<a href="seq_tail.html">BOOST_PP_SEQ_TAIL</a>(SEQ) // expands to (b)(c)
</pre>
</div>
</body>
</html>

View File

@ -1,47 +1,59 @@
<html>
<head>
<title>BOOST_PP_SET_INSERT</title>
<title>BOOST_PP_SEQ_INSERT</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_INSERT</b> macro inserts an element into an <i>set</i>.
The <b>BOOST_PP_SEQ_INSERT</b> macro inserts an element into an <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_INSERT</b>(<i>set</i>, <i>i</i>, <i>elem</i>)
<b>BOOST_PP_SEQ_INSERT</b>(<i>seq</i>, <i>i</i>, <i>elem</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> into which an element is to be inserted.
The <i>seq</i> into which an element is to be inserted.
</dd>
<dt>i</dt>
<dd>
The zero-based position in <i>set</i> where an element is to be inserted.&nbsp;
Valid values range from <i>0</i> to <b>BOOST_PP_SET_SIZE</b>(<i>set</i>) - <i>1</i>.
The zero-based position in <i>seq</i> where an element is to be inserted.&nbsp;
Valid values range from <i>0</i> to <b>BOOST_PP_SEQ_SIZE</b>(<i>seq</i>) - <i>1</i>.
</dd>
<dt>elem</dt>
<dd>
The element to insert.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro inserts <i>elem</i> before the element at index <i>i</i>.
</div>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/insert.hpp.html">&lt;boost/preprocessor/set/insert.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/insert.hpp.html">&lt;boost/preprocessor/seq/insert.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/insert.hpp.html">boost/preprocessor/set/insert.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/insert.hpp.html">boost/preprocessor/seq/insert.hpp</a>&gt;
#define SET (a)(b)(d)
#define SEQ (a)(b)(d)
<a href="set_insert.html">BOOST_PP_SET_INSERT</a>(SET, 2, c) // expands to (a)(b)(c)(d)
</pre></div>
<a href="seq_insert.html">BOOST_PP_SEQ_INSERT</a>(SEQ, 2, c) // expands to (a)(b)(c)(d)
</pre>
</div>
</body>
</html>

View File

@ -1,69 +1,89 @@
<html>
<head>
<title>BOOST_PP_SET_NIL</title>
<title>BOOST_PP_SEQ_NIL</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_NIL</b> macro is a placeholder macro for an empty <i>set</i>.&nbsp;
It is only valid if it is elements are appended to the end of this empty "set."&nbsp;
The <b>BOOST_PP_SEQ_NIL</b> macro is a placeholder macro for an empty <i>seq</i>.&nbsp;
It is only valid if it is elements are appended to the end of this empty
"seq."&nbsp;
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_NIL</b>
<b>BOOST_PP_SEQ_NIL</b>
</div>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro is a utility macro intended as a empty starting point for appending to the tail.&nbsp;
It is <i>not</i> a nil <i>set</i>.&nbsp;
When an element is appended to this macro, it expands on the element and to the element--thereby removing itself.&nbsp;
For example, both <b>BOOST_PP_SET_NIL</b>(<i>x</i>)
and <b>BOOST_PP_SET_PUSH_BACK</b>(<b>BOOST_PP_SET_NIL</b>, <i>x</i>) expand to <i>x</i>.
This macro is a utility macro intended as a empty starting point for appending
to the tail.&nbsp; It is <i>not</i> a nil <i>seq</i>.&nbsp; When an element is
appended to this macro, it expands on the element and to the element--thereby
removing itself.&nbsp; For example, both <b>BOOST_PP_SEQ_NIL</b>(<i>x</i>) and <b>BOOST_PP_SEQ_PUSH_BACK</b>(<b>BOOST_PP_SEQ_NIL</b>,
<i>x</i>) expand to <i>x</i>.
</div>
<div>
If any <b>BOOST_PP_SET_</b>* macro (other than <b>BOOST_PP_SET_PUSH_BACK</b>) is invoked with an argument that contains <b>BOOST_PP_SET_NIL</b>,
the behavior is undefined and in most cases will result in obscure errors.
If any <b>BOOST_PP_SEQ_</b>* macro (other than <b>BOOST_PP_SEQ_PUSH_BACK</b>)
is invoked with an argument that contains <b>BOOST_PP_SEQ_NIL</b>, the behavior
is undefined and in most cases will result in obscure errors.
</div>
<div>
The closest thing available to <b>BOOST_PP_SET_NIL</b> for appending to the head is <b>BOOST_PP_EMPTY</b>.&nbsp;
After all the elements have been prepended, empty parenthesis can be invoked on the tail to remove the <b>BOOST_PP_EMPTY</b>.&nbsp;
As with <b>BOOST_PP_SET_NIL</b>, passing an argument that contains <b>BOOST_PP_EMPTY</b> to any <b>BOOST_PP_SET_</b>* macro (other than <b>BOOST_PP_SET_PUSH_FRONT</b>) is undefined.&nbsp;
The closest thing available to <b>BOOST_PP_SEQ_NIL</b> for appending to the
head is <b>BOOST_PP_EMPTY</b>.&nbsp; After all the elements have been
prepended, empty parenthesis can be invoked on the tail to remove the <b>BOOST_PP_EMPTY</b>.&nbsp;
As with <b>BOOST_PP_SEQ_NIL</b>, passing an argument that contains <b>BOOST_PP_EMPTY</b>
to any <b>BOOST_PP_SEQ_</b>* macro (other than <b>BOOST_PP_SEQ_PUSH_FRONT</b>)
is undefined.&nbsp;
</div>
<div>
(It is also possible to start with an extra element and pop it off when you have finished appending to it.)
(It is also possible to start with an extra element and pop it off when you
have finished appending to it.)
</div>
<div>
In C99, neither of these macros are necessary since it is legal to pass empty arguments.
In C99, neither of these macros are necessary since it is legal to pass empty
arguments.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="empty.html">BOOST_PP_EMPTY</a></li>
<li>
<a href="empty.html">BOOST_PP_EMPTY</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/set.hpp.html">&lt;boost/preprocessor/set/set.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/seq.hpp.html">&lt;boost/preprocessor/seq/seq.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/facilities/empty.hpp.html">boost/preprocessor/facilities/empty.hpp</a>&gt;
#include &lt;<a href="../headers/set/push_back.hpp.html">boost/preprocessor/set/push_back.hpp</a>&gt;
#include &lt;<a href="../headers/set/push_front.hpp.html">boost/preprocessor/set/push_front.hpp</a>&gt;
#include &lt;<a href="../headers/set/set.hpp.html">boost/preprocessor/set/set.hpp</a>&gt;
#include &lt;<a href="../headers/seq/push_back.hpp.html">boost/preprocessor/seq/push_back.hpp</a>&gt;
#include &lt;<a href="../headers/seq/push_front.hpp.html">boost/preprocessor/seq/push_front.hpp</a>&gt;
#include &lt;<a href="../headers/seq/seq.hpp.html">boost/preprocessor/seq/seq.hpp</a>&gt;
#define SET_L <a href="set_nil.html">BOOST_PP_SET_NIL</a>
#define SET_R <a href="empty.html">BOOST_PP_EMPTY</a>
#define SEQ_L <a href="seq_nil.html">BOOST_PP_SEQ_NIL</a>
#define SEQ_R <a href="empty.html">BOOST_PP_EMPTY</a>
<a href="set_push_back.html">BOOST_PP_SET_PUSH_BACK</a>(
<a href="set_push_back.html">BOOST_PP_SET_PUSH_BACK</a>(SET_L, a), b
<a href="seq_push_back.html">BOOST_PP_SEQ_PUSH_BACK</a>(
<a href="seq_push_back.html">BOOST_PP_SEQ_PUSH_BACK</a>(SEQ_L, a), b
)
// expands to (a)(b)
<a href="set_push_front.html">BOOST_PP_SET_PUSH_FRONT</a>(
<a href="set_push_front.html">BOOST_PP_SET_PUSH_FRONT</a>(SET_R, a), b
<a href="seq_push_front.html">BOOST_PP_SEQ_PUSH_FRONT</a>(
<a href="seq_push_front.html">BOOST_PP_SEQ_PUSH_FRONT</a>(SEQ_R, a), b
)()
// expands to (b)(a)
</pre></div>
</pre>
</div>
</body>
</html>

View File

@ -1,42 +1,57 @@
<html>
<head>
<title>BOOST_PP_SET_POP_BACK</title>
<title>BOOST_PP_SEQ_POP_BACK</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_POP_BACK</b> macro pops an element from the end of a <i>set</i>.
The <b>BOOST_PP_SEQ_POP_BACK</b> macro pops an element from the end of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_POP_BACK</b>(<i>set</i>)
<b>BOOST_PP_SEQ_POP_BACK</b>(<i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to pop an element from.
The <i>seq</i> to pop an element from.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro returns <i>set</i> after removing the last element.&nbsp;
This macro returns <i>seq</i> after removing the last element.&nbsp;
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_pop_front.html">BOOST_PP_SET_POP_FRONT</a></li>
<li>
<a href="seq_pop_front.html">BOOST_PP_SEQ_POP_FRONT</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/pop_back.hpp.html">&lt;boost/preprocessor/set/pop_back.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/pop_back.hpp.html">&lt;boost/preprocessor/seq/pop_back.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/pop_back.hpp.html">boost/preprocessor/set/pop_back.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/pop_back.hpp.html">boost/preprocessor/seq/pop_back.hpp</a>&gt;
#define SET (a)(b)(c)
#define SEQ (a)(b)(c)
<a href="set_pop_back.html">BOOST_PP_SET_POP_BACK</a>(SET) // expands to (a)(b)
</pre></div>
<a href="seq_pop_back.html">BOOST_PP_SEQ_POP_BACK</a>(SEQ) // expands to (a)(b)
</pre>
</div>
</body>
</html>

View File

@ -1,42 +1,57 @@
<html>
<head>
<title>BOOST_PP_SET_POP_FRONT</title>
<title>BOOST_PP_SEQ_POP_FRONT</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_POP_FRONT</b> macro pops an element from the beginning of a <i>set</i>.
The <b>BOOST_PP_SEQ_POP_FRONT</b> macro pops an element from the beginning of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_POP_FRONT</b>(<i>set</i>)
<b>BOOST_PP_SEQ_POP_FRONT</b>(<i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to pop an element from.
The <i>seq</i> to pop an element from.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro returns <i>set</i> after removing the first element.&nbsp;
This macro returns <i>seq</i> after removing the first element.&nbsp;
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_pop_back.html">BOOST_PP_SET_POP_BACK</a></li>
<li>
<a href="seq_pop_back.html">BOOST_PP_SEQ_POP_BACK</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/pop_front.hpp.html">&lt;boost/preprocessor/set/pop_front.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/pop_front.hpp.html">&lt;boost/preprocessor/seq/pop_front.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/pop_front.hpp.html">boost/preprocessor/set/pop_front.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/pop_front.hpp.html">boost/preprocessor/seq/pop_front.hpp</a>&gt;
#define SET (a)(b)(c)
#define SEQ (a)(b)(c)
<a href="set_pop_front.html">BOOST_PP_SET_POP_FRONT</a>(SET) // expands to (b)(c)
</pre></div>
<a href="seq_pop_front.html">BOOST_PP_SEQ_POP_FRONT</a>(SEQ) // expands to (b)(c)
</pre>
</div>
</body>
</html>

View File

@ -1,50 +1,65 @@
<html>
<head>
<title>BOOST_PP_SET_PUSH_BACK</title>
<title>BOOST_PP_SEQ_PUSH_BACK</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_PUSH_BACK</b> macro pushes an element onto the end of a <i>set</i>.
The <b>BOOST_PP_SEQ_PUSH_BACK</b> macro pushes an element onto the end of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_PUSH_BACK</b>(<i>set</i>, <i>elem</i>)
<b>BOOST_PP_SEQ_PUSH_BACK</b>(<i>seq</i>, <i>elem</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> onto which <i>elem</i> is pushed.
The <i>seq</i> onto which <i>elem</i> is pushed.
</dd>
<dt>elem</dt>
<dd>
The element to push onto the end of <i>set</i>.
The element to push onto the end of <i>seq</i>.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro returns <i>set</i> after appending <i>elem</i>.&nbsp;
This macro returns <i>seq</i> after appending <i>elem</i>.&nbsp;
</div>
<div>
This macro is an explicit form of directly appending an element.&nbsp;
In other words, <b>BOOST_PP_SET_PUSH_BACK</b>(<i>set</i>, <i>x</i>) is equivalent to <i>set</i>(<i>x</i>).
This macro is an explicit form of directly appending an element.&nbsp; In other
words, <b>BOOST_PP_SEQ_PUSH_BACK</b>(<i>seq</i>, <i>x</i>) is equivalent to <i>seq</i>(<i>x</i>).
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_push_front.html">BOOST_PP_SET_PUSH_FRONT</a></li>
<li>
<a href="seq_push_front.html">BOOST_PP_SEQ_PUSH_FRONT</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/push_back.hpp.html">&lt;boost/preprocessor/set/push_back.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/push_back.hpp.html">&lt;boost/preprocessor/seq/push_back.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/push_back.hpp.html">boost/preprocessor/set/push_back.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/push_back.hpp.html">boost/preprocessor/seq/push_back.hpp</a>&gt;
#define SET (a)(b)
#define SEQ (a)(b)
<a href="set_push_back.html">BOOST_PP_SET_PUSH_BACK</a>(SET, c) // expands to (a)(b)(c)
</pre></div>
<a href="seq_push_back.html">BOOST_PP_SEQ_PUSH_BACK</a>(SEQ, c) // expands to (a)(b)(c)
</pre>
</div>
</body>
</html>

View File

@ -1,50 +1,67 @@
<html>
<head>
<title>BOOST_PP_SET_PUSH_FRONT</title>
<title>BOOST_PP_SEQ_PUSH_FRONT</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_PUSH_FRONT</b> macro pushes an element onto the beginning of a <i>set</i>.
The <b>BOOST_PP_SEQ_PUSH_FRONT</b> macro pushes an element onto the beginning
of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_PUSH_FRONT</b>(<i>set</i>, <i>elem</i>)
<b>BOOST_PP_SEQ_PUSH_FRONT</b>(<i>seq</i>, <i>elem</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> onto which <i>elem</i> is pushed.
The <i>seq</i> onto which <i>elem</i> is pushed.
</dd>
<dt>elem</dt>
<dd>
The element to push onto the beginning of <i>set</i>.
The element to push onto the beginning of <i>seq</i>.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro returns <i>set</i> after prepending <i>elem</i>.&nbsp;
This macro returns <i>seq</i> after prepending <i>elem</i>.&nbsp;
</div>
<div>
This macro is an explicit form of directly prepending an element.&nbsp;
In other words, <b>BOOST_PP_SET_PUSH_FRONT</b>(<i>set</i>, <i>x</i>) is equivalent to (<i>x</i>)<i>set</i>.
This macro is an explicit form of directly prepending an element.&nbsp; In
other words, <b>BOOST_PP_SEQ_PUSH_FRONT</b>(<i>seq</i>, <i>x</i>) is equivalent
to (<i>x</i>)<i>seq</i>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_push_back.html">BOOST_PP_SET_PUSH_BACK</a></li>
<li>
<a href="seq_push_back.html">BOOST_PP_SEQ_PUSH_BACK</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/push_front.hpp.html">&lt;boost/preprocessor/set/push_front.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/push_front.hpp.html">&lt;boost/preprocessor/seq/push_front.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/push_front.hpp.html">boost/preprocessor/set/push_front.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/push_front.hpp.html">boost/preprocessor/seq/push_front.hpp</a>&gt;
#define SET (b)(c)
#define SEQ (b)(c)
<a href="set_push_front.html">BOOST_PP_SET_PUSH_FRONT</a>(SET, a) // expands to (a)(b)(c)
</pre></div>
<a href="seq_push_front.html">BOOST_PP_SEQ_PUSH_FRONT</a>(SEQ, a) // expands to (a)(b)(c)
</pre>
</div>
</body>
</html>

View File

@ -1,43 +1,55 @@
<html>
<head>
<title>BOOST_PP_SET_REMOVE</title>
<title>BOOST_PP_SEQ_REMOVE</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_REMOVE</b> macro removes an element from a <i>set</i>.
The <b>BOOST_PP_SEQ_REMOVE</b> macro removes an element from a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_REMOVE</b>(<i>set</i>, <i>i</i>)
<b>BOOST_PP_SEQ_REMOVE</b>(<i>seq</i>, <i>i</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> from which an element is to be removed.
The <i>seq</i> from which an element is to be removed.
</dd>
<dt>i</dt>
<dd>
The zero-based position in <i>set</i> of the element to be removed.&nbsp;
Valid values range from <i>0</i> to <b>BOOST_PP_SET_SIZE</b>(<i>set</i>) - <i>1</i>.
The zero-based position in <i>seq</i> of the element to be removed.&nbsp; Valid
values range from <i>0</i> to <b>BOOST_PP_SEQ_SIZE</b>(<i>seq</i>) - <i>1</i>.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro returns <i>set</i> after removing the element at index <i>i</i>.
This macro returns <i>seq</i> after removing the element at index <i>i</i>.
</div>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/remove.hpp.html">&lt;boost/preprocessor/set/remove.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/remove.hpp.html">&lt;boost/preprocessor/seq/remove.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/remove.hpp.html">boost/preprocessor/set/remove.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/remove.hpp.html">boost/preprocessor/seq/remove.hpp</a>&gt;
#define SET (a)(b)(x)(c)
#define SEQ (a)(b)(x)(c)
<a href="set_remove.html">BOOST_PP_SET_REMOVE</a>(SET, 2) // expands to (a)(b)(c)
</pre></div>
<a href="seq_remove.html">BOOST_PP_SEQ_REMOVE</a>(SEQ, 2) // expands to (a)(b)(c)
</pre>
</div>
</body>
</html>

View File

@ -1,47 +1,60 @@
<html>
<head>
<title>BOOST_PP_SET_REPLACE</title>
<title>BOOST_PP_SEQ_REPLACE</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_REPLACE</b> macro replaces an element in a <i>set</i>.
The <b>BOOST_PP_SEQ_REPLACE</b> macro replaces an element in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_RPLACE</b>(<i>set</i>, <i>i</i>, <i>elem</i>)
<b>BOOST_PP_SEQ_RPLACE</b>(<i>seq</i>, <i>i</i>, <i>elem</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> in which an element is to be replaced.
The <i>seq</i> in which an element is to be replaced.
</dd>
<dt>i</dt>
<dd>
The zero-based position in <i>set</i> of the element to be replaced.&nbsp;
Valid values range from <i>0</i> to <b>BOOST_PP_SET_SIZE</b>(<i>set</i>) - <i>1</i>.
The zero-based position in <i>seq</i> of the element to be replaced.&nbsp;
Valid values range from <i>0</i> to <b>BOOST_PP_SEQ_SIZE</b>(<i>seq</i>) - <i>1</i>.
</dd>
<dt>elem</dt>
<dd>
The element to replace the element at index <i>i</i> within <i>set</i>.
The element to replace the element at index <i>i</i> within <i>seq</i>.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro returns <i>set</i> after replacing the element at index <i>i</i> with <i>elem</i>.
This macro returns <i>seq</i> after replacing the element at index <i>i</i> with
<i>elem</i>.
</div>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/replace.hpp.html">&lt;boost/preprocessor/set/replace.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/replace.hpp.html">&lt;boost/preprocessor/seq/replace.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/replace.hpp.html">boost/preprocessor/set/replace.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/replace.hpp.html">boost/preprocessor/seq/replace.hpp</a>&gt;
#define SET (a)(b)(x)(d)
#define SEQ (a)(b)(x)(d)
<a href="set_replace.html">BOOST_PP_SET_REPLACE</a>(SET, 2, c) // expands to (a)(b)(c)(d)
</pre></div>
<a href="seq_replace.html">BOOST_PP_SEQ_REPLACE</a>(SEQ, 2, c) // expands to (a)(b)(c)(d)
</pre>
</div>
</body>
</html>

View File

@ -1,17 +1,22 @@
<html>
<head>
<title>BOOST_PP_SET_REST_N</title>
<title>BOOST_PP_SEQ_REST_N</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_REST_N</b> macro expands to a <i>set</i> of all but the first <i>n</i> elements of a <i>set</i>.
The <b>BOOST_PP_SEQ_REST_N</b> macro expands to a <i>seq</i> of all but the
first <i>n</i> elements of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_REST_N</b>(<i>n</i>, <i>list</i>)
<b>BOOST_PP_SEQ_REST_N</b>(<i>n</i>, <i>list</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>n</dt>
<dd>
@ -19,28 +24,39 @@
</dd>
<dt>list</dt>
<dd>
The <i>set</i> from which the elements are to be removed.
The <i>seq</i> from which the elements are to be removed.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro extracts <i>n</i> elements from the beginning of <i>set</i> and returns the remainder of <i>set</i> as a new <i>set</i>
This macro extracts <i>n</i> elements from the beginning of <i>seq</i> and
returns the remainder of <i>seq</i> as a new <i>seq</i>
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_first_n.html">BOOST_PP_SET_FIRST_N</a></li>
<li>
<a href="seq_first_n.html">BOOST_PP_SEQ_FIRST_N</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/rest_n.hpp.html">&lt;boost/preprocessor/set/rest_n.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/rest_n.hpp.html">&lt;boost/preprocessor/seq/rest_n.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/arithmetic/inc.hpp.html">boost/preprocessor/arithmetic/inc.hpp</a>&gt;
#include &lt;<a href="../headers/set/elem.hpp.html">boost/preprocessor/set/elem.hpp</a>&gt;
#include &lt;<a href="../headers/set/first_n.hpp.html">boost/preprocessor/set/first_n.hpp</a>&gt;
#include &lt;<a href="../headers/set/rest_n.hpp.html">boost/preprocessor/set/rest_n.hpp</a>&gt;
#include &lt;<a href="../headers/set/size.hpp.html">boost/preprocessor/set/size.hpp</a>&gt;
#include &lt;<a href="../headers/seq/elem.hpp.html">boost/preprocessor/seq/elem.hpp</a>&gt;
#include &lt;<a href="../headers/seq/first_n.hpp.html">boost/preprocessor/seq/first_n.hpp</a>&gt;
#include &lt;<a href="../headers/seq/rest_n.hpp.html">boost/preprocessor/seq/rest_n.hpp</a>&gt;
#include &lt;<a href="../headers/seq/size.hpp.html">boost/preprocessor/seq/size.hpp</a>&gt;
#define NUMBERS \
(0)(1)(2)(3)(4)(5)(6)(7)(8)(9) \
@ -71,15 +87,15 @@
(250)(251)(252)(253)(254)(255)(256) \
/**/
#define SUPER_ADD(x, y) <a href="set_elem.html">BOOST_PP_SET_ELEM</a>(y, <a href="set_rest_n.html">BOOST_PP_SET_REST_N</a>(x, NUMBERS))
#define SUPER_ADD(x, y) <a href="seq_elem.html">BOOST_PP_SEQ_ELEM</a>(y, <a href="seq_rest_n.html">BOOST_PP_SEQ_REST_N</a>(x, NUMBERS))
SUPER_ADD(100, 100) // expands to 200
#define SUPER_SUB(x, y) \
<a href="set_size.html">BOOST_PP_SET_SIZE</a>( \
<a href="set_rest_n.html">BOOST_PP_SET_REST_N</a>( \
<a href="seq_size.html">BOOST_PP_SEQ_SIZE</a>( \
<a href="seq_rest_n.html">BOOST_PP_SEQ_REST_N</a>( \
<a href="inc.html">BOOST_PP_INC</a>(y), \
<a href="set_first_n.html">BOOST_PP_SET_FIRST_N</a>( \
<a href="seq_first_n.html">BOOST_PP_SEQ_FIRST_N</a>( \
<a href="inc.html">BOOST_PP_INC</a>(x), NUMBERS \
) \
) \
@ -87,6 +103,7 @@ SUPER_ADD(100, 100) // expands to 200
/**/
SUPER_SUB(67, 25) // expands to 42
</pre></div>
</pre>
</div>
</body>
</html>

View File

@ -1,42 +1,57 @@
<html>
<head>
<title>BOOST_PP_SET_REVERSE</title>
<title>BOOST_PP_SEQ_REVERSE</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_REVERSE</b> macro reverses a <i>set</i>.
The <b>BOOST_PP_SEQ_REVERSE</b> macro reverses a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_REVERSE</b>(<i>set</i>)
<b>BOOST_PP_SEQ_REVERSE</b>(<i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be reversed.
The <i>seq</i> to be reversed.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
For maximum efficiency, use <b>BOOST_PP_SET_REVERSE_S</b>.
For maximum efficiency, use <b>BOOST_PP_SEQ_REVERSE_S</b>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_reverse_s.html">BOOST_PP_SET_REVERSE_S</a></li>
<li>
<a href="seq_reverse_s.html">BOOST_PP_SEQ_REVERSE_S</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/reverse.hpp.html">&lt;boost/preprocessor/set/reverse.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/reverse.hpp.html">&lt;boost/preprocessor/seq/reverse.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/reverse.hpp.html">boost/preprocessor/set/reverse.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/reverse.hpp.html">boost/preprocessor/seq/reverse.hpp</a>&gt;
#define SET (1)(2)(3)
#define SEQ (1)(2)(3)
<a href="set_reverse.html">BOOST_PP_SET_REVERSE</a>(SET) // expands to (3)(2)(1)
</pre></div>
<a href="seq_reverse.html">BOOST_PP_SEQ_REVERSE</a>(SEQ) // expands to (3)(2)(1)
</pre>
</div>
</body>
</html>

View File

@ -1,35 +1,44 @@
<html>
<head>
<title>BOOST_PP_SET_REVERSE_S</title>
<title>BOOST_PP_SEQ_REVERSE_S</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_REVERSE_S</b> macro reverses a <i>set</i>.&nbsp;
It reenters <b>BOOST_PP_SET_FOLD_LEFT</b> with maximum efficiency.
The <b>BOOST_PP_SEQ_REVERSE_S</b> macro reverses a <i>seq</i>.&nbsp; It
reenters <b>BOOST_PP_SEQ_FOLD_LEFT</b> with maximum efficiency.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_REVERSE_S</b>(<i>s</i>, <i>set</i>)
<b>BOOST_PP_SEQ_REVERSE_S</b>(<i>s</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>s</dt>
<dd>
The next available <b>BOOST_PP_SET_FOLD_LEFT</b> fold step.
The next available <b>BOOST_PP_SEQ_FOLD_LEFT</b> fold step.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be reversed.
The <i>seq</i> to be reversed.
</dd>
</dl>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_reverse.html">BOOST_PP_SET_REVERSE</a></li>
<li>
<a href="seq_reverse.html">BOOST_PP_SEQ_REVERSE</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/reverse.hpp.html">&lt;boost/preprocessor/set/reverse.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/reverse.hpp.html">&lt;boost/preprocessor/seq/reverse.hpp&gt;</a>
</div>
</body>
</html>

View File

@ -1,34 +1,44 @@
<html>
<head>
<title>BOOST_PP_SET_SIZE</title>
<title>BOOST_PP_SEQ_SIZE</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_SIZE</b> macro expands to the size of a <i>set</i>.
The <b>BOOST_PP_SEQ_SIZE</b> macro expands to the size of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_SIZE</b>(<i>set</i>)
<b>BOOST_PP_SEQ_SIZE</b>(<i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> whose size is to be calculated.
The <i>seq</i> whose size is to be calculated.
</dd>
</dl>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/size.hpp.html">&lt;boost/preprocessor/set/size.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/size.hpp.html">&lt;boost/preprocessor/seq/size.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/size.hpp.html">boost/preprocessor/set/size.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/size.hpp.html">boost/preprocessor/seq/size.hpp</a>&gt;
#define SET (a)(b)(c)
#define SEQ (a)(b)(c)
<a href="set_size.html">BOOST_PP_SET_SIZE</a>(SET) // expands to 3
</pre></div>
<a href="seq_size.html">BOOST_PP_SEQ_SIZE</a>(SEQ) // expands to 3
</pre>
</div>
</body>
</html>

View File

@ -1,46 +1,58 @@
<html>
<head>
<title>BOOST_PP_SET_SUBSET</title>
<title>BOOST_PP_SEQ_SUBSEQ</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_SUBSET</b> macro expands to a subset of elements in a <i>set</i>.
The <b>BOOST_PP_SEQ_SUBSEQ</b> macro expands to a subseq of elements in a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_SUBSET</b>(<i>set</i>, <i>i</i>, <i>len</i>)
<b>BOOST_PP_SEQ_SUBSEQ</b>(<i>seq</i>, <i>i</i>, <i>len</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> whose size is to be calculated.
The <i>seq</i> whose size is to be calculated.
</dd>
<dt>i</dt>
<dd>
The index of the first element of the subset to be extracted.
The index of the first element of the subseq to be extracted.
</dd>
<dt>len</dt>
<dd>
The length of the subset to be extracted.
The length of the subseq to be extracted.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro expands to a <i>set</i> extracted from <i>set</i>.
This macro expands to a <i>seq</i> extracted from <i>seq</i>.
</div>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/subset.hpp.html">&lt;boost/preprocessor/set/subset.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/subseq.hpp.html">&lt;boost/preprocessor/seq/subseq.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/subset.hpp.html">boost/preprocessor/set/subset.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/subseq.hpp.html">boost/preprocessor/seq/subseq.hpp</a>&gt;
#define SET (0)(1)(2)(3)(4)(5)
#define SEQ (0)(1)(2)(3)(4)(5)
<a href="set_subset.html">BOOST_PP_SET_SUBSET</a>(SET, 2, 3) // expands to (2)(3)(4)
</pre></div>
<a href="seq_subseq.html">BOOST_PP_SEQ_SUBSEQ</a>(SEQ, 2, 3) // expands to (2)(3)(4)
</pre>
</div>
</body>
</html>

View File

@ -1,39 +1,52 @@
<html>
<head>
<title>BOOST_PP_SET_TAIL</title>
<title>BOOST_PP_SEQ_TAIL</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_HEAD</b> macro expands to all but the first element of a <i>set</i>.
The <b>BOOST_PP_SEQ_HEAD</b> macro expands to all but the first element of a <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_TAIL</b>(<i>set</i>)
<b>BOOST_PP_SEQ_TAIL</b>(<i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> from which the tail is extracted.
The <i>seq</i> from which the tail is extracted.
</dd>
</dl>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_head.html">BOOST_PP_SET_HEAD</a></li>
<li>
<a href="seq_head.html">BOOST_PP_SEQ_HEAD</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/set.hpp.html">&lt;boost/preprocessor/set/set.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/seq.hpp.html">&lt;boost/preprocessor/seq/seq.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/set.hpp.html">boost/preprocessor/set/set.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/seq.hpp.html">boost/preprocessor/seq/seq.hpp</a>&gt;
#define SET (a)(b)(c)
#define SEQ (a)(b)(c)
<a href="set_head.html">BOOST_PP_SET_HEAD</a>(SET) // expands to a
<a href="set_tail.html">BOOST_PP_SET_TAIL</a>(SET) // expands to (b)(c)
</pre></div>
<a href="seq_head.html">BOOST_PP_SEQ_HEAD</a>(SEQ) // expands to a
<a href="seq_tail.html">BOOST_PP_SEQ_TAIL</a>(SEQ) // expands to (b)(c)
</pre>
</div>
</body>
</html>

View File

@ -1,34 +1,44 @@
<html>
<head>
<title>BOOST_PP_SET_TO_ARRAY</title>
<title>BOOST_PP_SEQ_TO_ARRAY</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_TO_ARRAY</b> macro converts a <i>set</i> to an <i>array</i>.
The <b>BOOST_PP_SEQ_TO_ARRAY</b> macro converts a <i>seq</i> to an <i>array</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_TO_ARRAY</b>(<i>set</i>)
<b>BOOST_PP_SEQ_TO_ARRAY</b>(<i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be converted.
The <i>seq</i> to be converted.
</dd>
</dl>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/to_array.hpp.html">&lt;boost/preprocessor/set/to_array.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/to_array.hpp.html">&lt;boost/preprocessor/seq/to_array.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/to_array.hpp.html">boost/preprocessor/set/to_array.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/to_array.hpp.html">boost/preprocessor/seq/to_array.hpp</a>&gt;
#define SET (a)(b)(c)
#define SEQ (a)(b)(c)
<a href="set_to_array.html">BOOST_PP_SET_TO_ARRAY</a>(SET) // expands to (3, (a, b, c))
</pre></div>
<a href="seq_to_array.html">BOOST_PP_SEQ_TO_ARRAY</a>(SEQ) // expands to (3, (a, b, c))
</pre>
</div>
</body>
</html>

View File

@ -1,34 +1,44 @@
<html>
<head>
<title>BOOST_PP_SET_TO_TUPLE</title>
<title>BOOST_PP_SEQ_TO_TUPLE</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_TO_TUPLE</b> macro converts a <i>set</i> to an <i>tuple</i>.
The <b>BOOST_PP_SEQ_TO_TUPLE</b> macro converts a <i>seq</i> to an <i>tuple</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_TO_TUPLE</b>(<i>set</i>)
<b>BOOST_PP_SEQ_TO_TUPLE</b>(<i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be converted.
The <i>seq</i> to be converted.
</dd>
</dl>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/to_tuple.hpp.html">&lt;boost/preprocessor/set/to_tuple.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/to_tuple.hpp.html">&lt;boost/preprocessor/seq/to_tuple.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/set/to_tuple.hpp.html">boost/preprocessor/set/to_tuple.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/seq/to_tuple.hpp.html">boost/preprocessor/seq/to_tuple.hpp</a>&gt;
#define SET (a)(b)(c)
#define SEQ (a)(b)(c)
<a href="set_to_tuple.html">BOOST_PP_SET_TO_TUPLE</a>(SET) // expands to (a, b, c)
</pre></div>
<a href="seq_to_tuple.html">BOOST_PP_SEQ_TO_TUPLE</a>(SEQ) // expands to (a, b, c)
</pre>
</div>
</body>
</html>

View File

@ -1,65 +1,82 @@
<html>
<head>
<title>BOOST_PP_SET_TRANSFORM</title>
<title>BOOST_PP_SEQ_TRANSFORM</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_TRANSFORM</b> macro transforms each element in a <i>set</i> according to a supplied transformation.
The <b>BOOST_PP_SEQ_TRANSFORM</b> macro transforms each element in a <i>seq</i>
according to a supplied transformation.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_TRANSFORM</b>(<i>op</i>, <i>data</i>, <i>set</i>)
<b>BOOST_PP_SEQ_TRANSFORM</b>(<i>op</i>, <i>data</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>op</dt>
<dd>
A ternary predicate of the form <i>op</i>(<i>s</i>, <i>data</i>, <i>elem</i>).&nbsp;
This transformation is expanded by <b>BOOST_PP_SET_TRANSFORM</b> for each element in <i>set</i> with the next available <b>BOOST_PP_SET_FOLD_LEFT</b> fold step,
the auxiliary <i>data</i>, and the current element in <i>set</i>.&nbsp;
This transformation is expanded by <b>BOOST_PP_SEQ_TRANSFORM</b> for each
element in <i>seq</i> with the next available <b>BOOST_PP_SEQ_FOLD_LEFT</b> fold
step, the auxiliary <i>data</i>, and the current element in <i>seq</i>.&nbsp;
</dd>
<dt>data</dt>
<dd>
Auxiliary data passed to <i>pred</i>.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be transformed.
The <i>seq</i> to be transformed.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro expands <i>op</i> for each element in <i>set</i>.&nbsp;
It builds a new <i>set</i> out of the results of each call.&nbsp;
If, for example, <i>set</i> is (<i>a</i>)(<i>b</i>)(<i>c</i>),
this macro expands to...
This macro expands <i>op</i> for each element in <i>seq</i>.&nbsp; It builds a
new <i>seq</i> out of the results of each call.&nbsp; If, for example, <i>seq</i>
is (<i>a</i>)(<i>b</i>)(<i>c</i>), this macro expands to...
<div>
(<i>op</i>(<i>d</i>, <i>data</i>, <i>a</i>))(<i>op</i>(<i>d</i>, <i>data</i>, <i>b</i>))(<i>op</i>(<i>d</i>, <i>data</i>, <i>c</i>))
(<i>op</i>(<i>d</i>, <i>data</i>, <i>a</i>))(<i>op</i>(<i>d</i>, <i>data</i>, <i>b</i>))(<i>op</i>(<i>d</i>,
<i>data</i>, <i>c</i>))
</div>
</div>
<div>
For maximum efficiency, use <b>BOOST_PP_SET_TRANSFORM_S</b>.
For maximum efficiency, use <b>BOOST_PP_SEQ_TRANSFORM_S</b>.
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_transform_s.html">BOOST_PP_SET_TRANSFORM_S</a></li>
<li>
<a href="seq_transform_s.html">BOOST_PP_SEQ_TRANSFORM_S</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/transform.hpp.html">&lt;boost/preprocessor/set/transform.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/transform.hpp.html">&lt;boost/preprocessor/seq/transform.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/arithmetic/dec.hpp.html">boost/preprocessor/arithmetic/dec.hpp</a>&gt;
#include &lt;<a href="../headers/set/transform.hpp.html">boost/preprocessor/set/transform.hpp</a>&gt;
#include &lt;<a href="../headers/seq/transform.hpp.html">boost/preprocessor/seq/transform.hpp</a>&gt;
#define SET (1)(3)(2)(5)
#define SEQ (1)(3)(2)(5)
#define OP(s, data, elem) <a href="dec.html">BOOST_PP_DEC</a>(elem)
<a href="set_transform.html">BOOST_PP_SET_TRANSFORM</a>(OP, 3, SET)
<a href="seq_transform.html">BOOST_PP_SEQ_TRANSFORM</a>(OP, 3, SEQ)
// expands to (0)(2)(1)(4)
</pre></div>
</pre>
</div>
</body>
</html>

View File

@ -1,55 +1,68 @@
<html>
<head>
<title>BOOST_PP_SET_TRANSFORM_S</title>
<title>BOOST_PP_SEQ_TRANSFORM_S</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_SET_TRANSFORM_S</b> macro transforms each element in a <i>set</i> according to a supplied transformation.&nbsp;
It reenters <b>BOOST_PP_SET_FOLD_LEFT</b> with maximum efficiency.
The <b>BOOST_PP_SEQ_TRANSFORM_S</b> macro transforms each element in a <i>seq</i>
according to a supplied transformation.&nbsp; It reenters <b>BOOST_PP_SEQ_FOLD_LEFT</b>
with maximum efficiency.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_SET_TRANSFORM_S</b>(<i>s</i>, <i>op</i>, <i>data</i>, <i>set</i>)
<b>BOOST_PP_SEQ_TRANSFORM_S</b>(<i>s</i>, <i>op</i>, <i>data</i>, <i>seq</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>s</dt>
<dd>
The next available <b>BOOST_PP_SET_FOLD_LEFT</b> fold step.
The next available <b>BOOST_PP_SEQ_FOLD_LEFT</b> fold step.
</dd>
<dt>op</dt>
<dd>
A ternary predicate of the form <i>op</i>(<i>s</i>, <i>data</i>, <i>elem</i>).&nbsp;
This transformation is expanded by <b>BOOST_PP_SET_TRANSFORM</b> for each element in <i>set</i> with the next available <b>BOOST_PP_SET_FOLD_LEFT</b> fold step,
the auxiliary <i>data</i>, and the current element in <i>set</i>.&nbsp;
This transformation is expanded by <b>BOOST_PP_SEQ_TRANSFORM</b> for each
element in <i>seq</i> with the next available <b>BOOST_PP_SEQ_FOLD_LEFT</b> fold
step, the auxiliary <i>data</i>, and the current element in <i>seq</i>.&nbsp;
</dd>
<dt>data</dt>
<dd>
Auxiliary data passed to <i>pred</i>.
</dd>
<dt>set</dt>
<dt>seq</dt>
<dd>
The <i>set</i> to be transformed.
The <i>seq</i> to be transformed.
</dd>
</dl>
<h4>Remarks</h4>
<h4>
Remarks
</h4>
<div>
This macro expands <i>op</i> for each element in <i>set</i>.&nbsp;
It builds a new <i>set</i> out of the results of each call.&nbsp;
If, for example, <i>set</i> is (<i>a</i>)(<i>b</i>)(<i>c</i>),
this macro expands to...
This macro expands <i>op</i> for each element in <i>seq</i>.&nbsp; It builds a
new <i>seq</i> out of the results of each call.&nbsp; If, for example, <i>seq</i>
is (<i>a</i>)(<i>b</i>)(<i>c</i>), this macro expands to...
<div>
(<i>op</i>(<i>d</i>, <i>data</i>, <i>a</i>))(<i>op</i>(<i>d</i>, <i>data</i>, <i>b</i>))(<i>op</i>(<i>d</i>, <i>data</i>, <i>c</i>))
(<i>op</i>(<i>d</i>, <i>data</i>, <i>a</i>))(<i>op</i>(<i>d</i>, <i>data</i>, <i>b</i>))(<i>op</i>(<i>d</i>,
<i>data</i>, <i>c</i>))
</div>
</div>
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="set_transform.html">BOOST_PP_SET_TRANSFORM</a></li>
<li>
<a href="seq_transform.html">BOOST_PP_SEQ_TRANSFORM</a></li>
</ul>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/set/transform.hpp.html">&lt;boost/preprocessor/set/transform.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/seq/transform.hpp.html">&lt;boost/preprocessor/seq/transform.hpp&gt;</a>
</div>
</body>
</html>

View File

@ -1,17 +1,21 @@
<html>
<head>
<title>BOOST_PP_TUPLE_TO_SET</title>
<title>BOOST_PP_TUPLE_TO_SEQ</title>
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<div style="margin-left: 0px;">
The <b>BOOST_PP_TUPLE_TO_SET</b> macro converts a <i>tuple</i> to an <i>set</i>.
The <b>BOOST_PP_TUPLE_TO_SEQ</b> macro converts a <i>tuple</i> to an <i>seq</i>.
</div>
<h4>Usage</h4>
<h4>
Usage
</h4>
<div class="code">
<b>BOOST_PP_TUPLE_TO_SET</b>(<i>size</i>, <i>tuple</i>)
<b>BOOST_PP_TUPLE_TO_SEQ</b>(<i>size</i>, <i>tuple</i>)
</div>
<h4>Arguments</h4>
<h4>
Arguments
</h4>
<dl>
<dt>size</dt>
<dd>
@ -22,15 +26,21 @@
The <i>tuple</i> to be converted.
</dd>
</dl>
<h4>Requirements</h4>
<h4>
Requirements
</h4>
<div>
<b>Header:</b> &nbsp;<a href="../headers/tuple/to_set.hpp.html">&lt;boost/preprocessor/tuple/to_set.hpp&gt;</a>
<b>Header:</b> &nbsp;<a href="../headers/tuple/to_seq.hpp.html">&lt;boost/preprocessor/tuple/to_seq.hpp&gt;</a>
</div>
<h4>Sample Code</h4>
<div><pre>
#include &lt;<a href="../headers/tuple/to_set.hpp.html">boost/preprocessor/tuple/to_set.hpp</a>&gt;
<h4>
Sample Code
</h4>
<div>
<pre>
#include &lt;<a href="../headers/tuple/to_seq.hpp.html">boost/preprocessor/tuple/to_seq.hpp</a>&gt;
<a href="tuple_to_set.html">BOOST_PP_TUPLE_TO_SET</a>(3, (a, b, c)) // expands to (a)(b)(c)
</pre></div>
<a href="tuple_to_seq.html">BOOST_PP_TUPLE_TO_SEQ</a>(3, (a, b, c)) // expands to (a)(b)(c)
</pre>
</div>
</body>
</html>

View File

@ -3,23 +3,19 @@
<title>top.html</title>
<link rel="stylesheet" type="text/css" href="styles.css">
<style>
td {
height: 60px;
width: 100%;
text-align: center;
vertical-align: middle;
margin: 0px;
padding: 0px;
font-weight: bold;
}
td { height: 60px; width: 100%; text-align: center; vertical-align: middle;
margin: 0px; padding: 0px; font-weight: bold; }
</style>
</head>
<body style="margin: 0px; padding: 0px;">
<table style="width: 100%;">
<tr align="center">
<td>
The <a href="../../../index.htm" target="_parent"><font color="blue"><b>Boost</b></font></a> Library<br>
<a href="index.html" target="_parent"><font color="green"><b>Preprocessor</b></font></a> Subset for <font color="red">C/C++</font>
The <a href="../../../index.htm" target="_parent"><font color="blue"><b>Boost</b></font></a>
Library
<br>
<a href="index.html" target="_parent"><font color="green"><b>Preprocessor</b></font></a>
Subseq for <font color="red">C/C++</font>
</td>
</tr>
</table>

View File

@ -4,155 +4,193 @@
<link rel="stylesheet" type="text/css" href="../styles.css">
</head>
<body>
<h4>File Iteration</h4>
<h4>
File Iteration
</h4>
<div>
File iteration is a complex, but powerful, vertical repetition construct.&nbsp;
It repeatedly includes a <i>file</i> for each number in a user-specified range.
</div>
<h4>Tutorial</h4>
<h4>
Tutorial
</h4>
<div>
This mechanism requires two pieces of information to operate:&nbsp;
a range to iterate over and a file to include on each iteration.&nbsp;
It can optionally take a third piece of information that represents flags used to discriminate between
different iterations of the same file.&nbsp;
This information is obtained by the mechanism through one or two <i>named external arguments</i>.&nbsp;
This mechanism requires two pieces of information to operate:&nbsp; a range to
iterate over and a file to include on each iteration.&nbsp; It can optionally
take a third piece of information that represents flags used to discriminate
between different iterations of the same file.&nbsp; This information is
obtained by the mechanism through one or two <i>named external arguments</i>.&nbsp;
These arguments are specified as user-defined macros named <b>BOOST_PP_ITERATION_PARAMS_<i>x</i></b>
or the combination of <b>BOOST_PP_FILENAME_<i>x</i></b> and <b>BOOST_PP_ITERATION_LIMITS</b>.
</div>
<div>
<b>BOOST_PP_ITERATION_LIMITS</b> specifies the range of values to iterate over.&nbsp;
It <i>must</i> expand to a <i>tuple</i> containing two elements--a lower and upper bound.&nbsp;
Both the upper and lower bounds must be numeric values in the range of <i>0</i> to <b>BOOST_PP_LIMIT_ITERATION</b>.&nbsp;
For example, if the user wishes a file to be included for numbers ranging from <i>0</i> to <i>10</i>,
<b>BOOST_PP_ITERATION_LIMITS</b> would be defined like this:
<b>BOOST_PP_ITERATION_LIMITS</b> specifies the range of values to iterate
over.&nbsp; It <i>must</i> expand to a <i>tuple</i> containing two elements--a
lower and upper bound.&nbsp; Both the upper and lower bounds must be numeric
values in the range of <i>0</i> to <b>BOOST_PP_LIMIT_ITERATION</b>.&nbsp; For
example, if the user wishes a file to be included for numbers ranging from <i>0</i>
to <i>10</i>, <b>BOOST_PP_ITERATION_LIMITS</b> would be defined like this:
</div>
<div class="code"><pre>
<div class="code">
<pre>
#define BOOST_PP_ITERATION_LIMITS (0, 10)
</pre></div>
</pre>
</div>
<div>
Note that there is whitespace after the name of the macro.&nbsp;
The macro <i>does not</i> take <i>two</i> arguments.&nbsp;
In the case above, if there was no whitespace, a preprocessing error would occur because <i>0</i> and <i>10</i>
Note that there is whitespace after the name of the macro.&nbsp; The macro <i>does
not</i> take <i>two</i> arguments.&nbsp; In the case above, if there was
no whitespace, a preprocessing error would occur because <i>0</i> and <i>10</i>
are invalid identifiers.
</div>
<div>
Both the upper and lower bounds specified in the <b>BOOST_PP_ITERATION_LIMITS</b> macro are <i>evaluated parameters</i>.&nbsp;
This implies that they can include simple arithmetic or logical expressions.&nbsp;
For instance, the above definition could easily have been written like this:
Both the upper and lower bounds specified in the <b>BOOST_PP_ITERATION_LIMITS</b>
macro are <i>evaluated parameters</i>.&nbsp; This implies that they can include
simple arithmetic or logical expressions.&nbsp; For instance, the above
definition could easily have been written like this:
</div>
<div class="code"><pre>
<div class="code">
<pre>
#define N() 5
#define BOOST_PP_ITERATION_LIMITS (0, N() + 5)
</pre></div>
<div>
Because of this, if the whitespace after the macro name is elided, it is possible for the
definition to be syntactically valid:
</pre>
</div>
<div class="code"><pre>
<div>
Because of this, if the whitespace after the macro name is elided, it is
possible for the definition to be syntactically valid:
</div>
<div class="code">
<pre>
#define A 0
#define B 10
#define BOOST_PP_ITERATION_LIMITS(A, B)
// note: no whitespace ^
</pre></div>
<div>
If this happens, an error will occur inside the mechanism when it attempts to use this macro.&nbsp;
The error messages that result may be obscure, so always remember to include the whitespace.&nbsp;
A <i>correct</i> version of the above looks like this:
</pre>
</div>
<div class="code"><pre>
<div>
If this happens, an error will occur inside the mechanism when it attempts to
use this macro.&nbsp; The error messages that result may be obscure, so always
remember to include the whitespace.&nbsp; A <i>correct</i> version of the above
looks like this:
</div>
<div class="code">
<pre>
#define A 0
#define B 10
#define BOOST_PP_ITERATION_LIMITS (A, B)
// note: has whitespace ^
</pre></div>
<div>
<b>BOOST_PP_FILENAME_<i>x</i></b> specifies the file to iterate over.&nbsp;
The <i>x</i> is a placeholder for the dimension of iteration.&nbsp;
(For now, we'll assume this is <i>1</i>--i.e. the first dimension,
so we are actually dealing with <b>BOOST_PP_FILENAME_1</b>.)&nbsp;
This macro must expand to a valid filename--in quotes or in angle brackets depending on how the file is accessed:
</pre>
</div>
<div class="code"><pre>
<div>
<b>BOOST_PP_FILENAME_<i>x</i></b> specifies the file to iterate over.&nbsp; The <i>x</i>
is a placeholder for the dimension of iteration.&nbsp; (For now, we'll assume
this is <i>1</i>--i.e. the first dimension, so we are actually dealing with <b>BOOST_PP_FILENAME_1</b>.)&nbsp;
This macro must expand to a valid filename--in quotes or in angle brackets
depending on how the file is accessed:
</div>
<div class="code">
<pre>
#define BOOST_PP_FILENAME_1 "file.h"
// -or-
#define BOOST_PP_FILENAME_1 &lt;file.h&gt;
</pre></div>
<div>
All that we need now to perform a simple file iteration is to invoke the mechanism:
</pre>
</div>
<div class="code"><pre>
<div>
All that we need now to perform a simple file iteration is to invoke the
mechanism:
</div>
<div class="code">
<pre>
??=include BOOST_PP_ITERATE()
</pre></div>
<div>
(The <code>??=</code> token is a trigraph for <code>#</code>.&nbsp;
I use the trigraph to make it clear that I am <i>including</i> a file rather than defining or expanding a macro, but it is not necessary.&nbsp;
Even the digraph version, <code>%:</code>, could be used.&nbsp;
Some compilers do not readily accept trigraphs and digraphs, so keep that in mind.&nbsp;
Other than that, use whichever one you prefer.)
</pre>
</div>
<div>
So, if we wish to iterate "file.h" from <i>1</i> to <i>10</i>, we just need to put the pieces together:
(The <code>??=</code> token is a trigraph for <code>#</code>.&nbsp; I use the
trigraph to make it clear that I am <i>including</i> a file rather than
defining or expanding a macro, but it is not necessary.&nbsp; Even the digraph
version, <code>%:</code>, could be used.&nbsp; Some compilers do not readily
accept trigraphs and digraphs, so keep that in mind.&nbsp; Other than that, use
whichever one you prefer.)
</div>
<div class="code"><pre>
<div>
So, if we wish to iterate "file.h" from <i>1</i> to <i>10</i>, we just need to
put the pieces together:
</div>
<div class="code">
<pre>
#define BOOST_PP_ITERATION_LIMITS (1, 10)
#define BOOST_PP_FILENAME_1 "file.h"
??=include BOOST_PP_ITERATE()
</pre></div>
<div>
The above code has the effect of including "file.h" ten times in succession.&nbsp;
</pre>
</div>
<div>
Alternately, both the range and the file to iterate over can be expressed in one macro, <b>BOOST_PP_ITERATION_PARAMS_<i>x</i></b>.&nbsp;
Once again, the <i>x</i> is a placeholder for the dimension of iteration--which we'll assume is <i>1</i>.&nbsp;
This macro must expand to an <i>array</i> that includes the lower bound, upper bound, filename, and optional flags (in that order).
The above code has the effect of including "file.h" ten times in
succession.&nbsp;
</div>
<div class="code"><pre>
<div>
Alternately, both the range and the file to iterate over can be expressed in
one macro, <b>BOOST_PP_ITERATION_PARAMS_<i>x</i></b>.&nbsp; Once again, the <i>x</i>
is a placeholder for the dimension of iteration--which we'll assume is <i>1</i>.&nbsp;
This macro must expand to an <i>array</i> that includes the lower bound, upper
bound, filename, and optional flags (in that order).
</div>
<div class="code">
<pre>
#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 10, "file.h"))
??=include BOOST_PP_ITERATE()
</pre></div>
</pre>
</div>
<div>
This has the same effect as the previous version.&nbsp;
Only one of these two ways to specify the parameters can be used at a time.&nbsp;
(The reason that there are two different methods has to do with dimensional abstraction which I'll get to later.)
This has the same effect as the previous version.&nbsp; Only one of these two
ways to specify the parameters can be used at a time.&nbsp; (The reason that
there are two different methods has to do with dimensional abstraction which
I'll get to later.)
</div>
<div>
There is nothing particularly useful about including a file ten times.&nbsp;
The difference is that the current macro state changes each time.&nbsp;
For example, the current "iteration value" is available with <b>BOOST_PP_ITERATION</b>().&nbsp;
The difference is that the current macro state changes each time.&nbsp; For
example, the current "iteration value" is available with <b>BOOST_PP_ITERATION</b>().&nbsp;
If "file.h" is defined like this...
</div>
<div class="code"><pre>
<div class="code">
<pre>
// file.h
template&lt;&gt; struct sample&lt;BOOST_PP_ITERATION()&gt; { };
</pre></div>
</pre>
</div>
<div>
...and it is iterated as follows...
</div>
<div class="code"><pre>
<div class="code">
<pre>
template&lt;int&gt; struct sample;
#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 5, "file.h"))
??=include BOOST_PP_ITERATE()
</pre></div>
</pre>
</div>
<div>
...the result is different each time:
</div>
<div><pre>
<div>
<pre>
template&lt;&gt; struct sample&lt;1&gt; { };
template&lt;&gt; struct sample&lt;2&gt; { };
template&lt;&gt; struct sample&lt;3&gt; { };
template&lt;&gt; struct sample&lt;4&gt; { };
template&lt;&gt; struct sample&lt;5&gt; { };
</pre></div>
<div>
There is no reason that a file can't iterate over itself.&nbsp;
This has the advantage of keeping the code together.&nbsp;
The problem is that you have to discriminate the "regular" section of the file from the iterated section of the file.&nbsp;
The library provides the <b>BOOST_PP_IS_ITERATING</b> macro to help in this regard.&nbsp;
This macro is defined as <i>1</i> if an iteration is in progress.&nbsp;
For example, to merge the contents of "file.h" into the file that iterates it:
</pre>
</div>
<div class="code"><pre>
<div>
There is no reason that a file can't iterate over itself.&nbsp; This has the
advantage of keeping the code together.&nbsp; The problem is that you have to
discriminate the "regular" section of the file from the iterated section of the
file.&nbsp; The library provides the <b>BOOST_PP_IS_ITERATING</b> macro to help
in this regard.&nbsp; This macro is defined as <i>1</i> if an iteration is in
progress.&nbsp; For example, to merge the contents of "file.h" into the file
that iterates it:
</div>
<div class="code">
<pre>
// sample.h
#if !BOOST_PP_IS_ITERATING
@ -173,14 +211,16 @@ template&lt;&gt; struct sample&lt;5&gt; { };
template&lt;&gt; struct sample&lt;BOOST_PP_ITERATION()&gt; { };
#endif
</pre></div>
<div>
Using the same file like this raises another issue.&nbsp;
What happens when a file performs two separate file iterations over itself?&nbsp;
This is the purpose of the optional flags parameter.&nbsp;
It is used to discriminate between separate iterations.
</pre>
</div>
<div class="code"><pre>
<div>
Using the same file like this raises another issue.&nbsp; What happens when a
file performs two separate file iterations over itself?&nbsp; This is the
purpose of the optional flags parameter.&nbsp; It is used to discriminate
between separate iterations.
</div>
<div class="code">
<pre>
// sample.h
#if !BOOST_PP_IS_ITERATING
@ -239,19 +279,24 @@ template&lt;&gt; struct sample&lt;5&gt; { };
#undef N
#endif
</pre></div>
</pre>
</div>
<div>
Notice the use of the "flags" parameter (which is accessed through <b>BOOST_PP_ITERATION_FLAGS</b>()).&nbsp;
It discriminates between our recurring <code>sample</code> iteration and a typelist linearization iteration.&nbsp;
It discriminates between our recurring <code>sample</code> iteration and a
typelist linearization iteration.&nbsp;
</div>
<div>
The second iteration illustrates the power of the file iteration mechanism.&nbsp;
It generates typelist linearizations of the form <code>typelist&lt;3&gt;::args&lt;int, double, char&gt;::type</code>.
The second iteration illustrates the power of the file iteration
mechanism.&nbsp; It generates typelist linearizations of the form <code>typelist&lt;3&gt;::args&lt;int,
double, char&gt;::type</code>.
</div>
<div>
Actually, to continue the typelist example, with the help of another iteration we can <i>fully</i> linearize typelist creation....
Actually, to continue the typelist example, with the help of another iteration
we can <i>fully</i> linearize typelist creation....
</div>
<div class="code"><pre>
<div class="code">
<pre>
// extract.h
#if !BOOST_PP_IS_ITERATING
@ -304,68 +349,80 @@ template&lt;&gt; struct sample&lt;5&gt; { };
#undef N
#endif
</pre></div>
</pre>
</div>
<div>
Now we can define a helper macro to finish the job:
</div>
<div class="code"><pre>
<div class="code">
<pre>
#define TYPELIST(args) extract&lt;typelist, void args&gt;::type
typedef TYPELIST((int, double, incomplete&lt;void&gt;)) xyz;
</pre></div>
<div>
There are two minor caveats with this result.&nbsp;
First, certain types like <code>void</code> can't be the type of an argument, so they have to be
wrapped with <code>incomplete&lt;T&gt;</code>.&nbsp;
Second, the necessary double parenthesis is annoying.&nbsp;
If and when C++ gets C99's variadic macros, <code>TYPELIST</code> can be redefined:
</pre>
</div>
<div class="code"><pre>
<div>
There are two minor caveats with this result.&nbsp; First, certain types like <code>void</code>
can't be the type of an argument, so they have to be wrapped with <code>incomplete&lt;T&gt;</code>.&nbsp;
Second, the necessary double parenthesis is annoying.&nbsp; If and when C++
gets C99's variadic macros, <code>TYPELIST</code> can be redefined:
</div>
<div class="code">
<pre>
#define TYPELIST(...) extract&lt;typelist, void (__VA_ARGS__)&gt;::type
typedef TYPELIST(int, double, short) xyz;
</pre></div>
<div>
Note also that both the lower and upper bounds of an iteration are also accessible inside an iteration with
<b>BOOST_PP_ITERATION_START</b>() and <b>BOOST_PP_ITERATION_FINISH</b>().
</pre>
</div>
<div>
It is my hope that the explanation and examples presented here demonstrate the power of file iteration.&nbsp;
Even so, this is just the beginning.&nbsp;
The file iteration mechanism also defines a full suite of facilities to support multidimensional iteration.
Note also that both the lower and upper bounds of an iteration are also
accessible inside an iteration with <b>BOOST_PP_ITERATION_START</b>() and <b>BOOST_PP_ITERATION_FINISH</b>().
</div>
<h4>Multiple Dimensions</h4>
<div>
The file iteration mechanism supports up to <b>BOOST_PP_LIMIT_ITERATION_DIM</b> dimensions.&nbsp;
The first dimension (i.e. the outermost) we have already used above.&nbsp;
In order to use the second dimension (inside the first), we simply have to replace the placeholder <i>x</i>
with <i>2</i> instead of <i>1</i>.
It is my hope that the explanation and examples presented here demonstrate the
power of file iteration.&nbsp; Even so, this is just the beginning.&nbsp; The
file iteration mechanism also defines a full suite of facilities to support
multidimensional iteration.
</div>
<div class="code"><pre>
<h4>
Multiple Dimensions
</h4>
<div>
The file iteration mechanism supports up to <b>BOOST_PP_LIMIT_ITERATION_DIM</b>
dimensions.&nbsp; The first dimension (i.e. the outermost) we have already used
above.&nbsp; In order to use the second dimension (inside the first), we simply
have to replace the placeholder <i>x</i> with <i>2</i> instead of <i>1</i>.
</div>
<div class="code">
<pre>
#define BOOST_PP_ITERATION_PARAMS_2 /* ... */
^
</pre></div>
</pre>
</div>
<div>
...or...
</div>
<div class="code"><pre>
<div class="code">
<pre>
#define BOOST_PP_FILENAME_2 /* ... */
^
</pre></div>
</pre>
</div>
<div>
Each dimension must be used <i>in order</i> starting with <i>1</i>.&nbsp;
Therefore, the above can <i>only</i> be valid immediately inside the first dimension.&nbsp;
Therefore, the above can <i>only</i> be valid immediately inside the first
dimension.&nbsp;
</div>
<div>
At this point, further explanation is necessary regarding <b>BOOST_PP_ITERATION</b>,
<b>BOOST_PP_ITERATION_START</b>, and <b>BOOST_PP_ITERATION_FINISH</b>.&nbsp;
<b>BOOST_PP_ITERATION</b>() expands to the iteration value of the <i>current</i> dimension--regardless
of what dimension that is.&nbsp;
Likewise, <b>BOOST_PP_ITERATION_START</b>() and <b>BOOST_PP_ITERATION_FINISH</b>() expand to the lower
and upper bounds of the <i>current</i> dimension.&nbsp;
<b>BOOST_PP_ITERATION_START</b>, and <b>BOOST_PP_ITERATION_FINISH</b>.&nbsp; <b>BOOST_PP_ITERATION</b>()
expands to the iteration value of the <i>current</i> dimension--regardless of
what dimension that is.&nbsp; Likewise, <b>BOOST_PP_ITERATION_START</b>() and <b>BOOST_PP_ITERATION_FINISH</b>()
expand to the lower and upper bounds of the <i>current</i> dimension.&nbsp;
Using the following pseudo-code as reference:
</div>
<div class="code"><pre>
<div class="code">
<pre>
for (int i = start(1); i <= finish(1); ++i) {
// A
for (int j = start(2); j <= finish(2); ++j) {
@ -373,21 +430,25 @@ for (int i = start(1); i <= finish(1); ++i) {
}
// C
}
</pre></div>
<div>
At point <i>A</i>, <b>BOOST_PP_ITERATION</b>() refers to <code>i</code>.&nbsp;
<b>BOOST_PP_ITERATION_START</b>() and <b>BOOST_PP_ITERATION_FINISH</b>()
refer to <code>start(1)</code> and <code>finish(1)</code> respectively.&nbsp;
At point <i>B</i>, however, <b>BOOST_PP_ITERATION</b>() refers to <code>j</code>--the <i>current</i>
iteration value at point <i>B</i>.&nbsp;
The same is true for <b>BOOST_PP_ITERATION_START</b>() which refers to <code>start(2)</code>, etc..
</pre>
</div>
<div>
If separate files are used for each dimension, then there are no major problems, and using multiple dimensions is straightforward.&nbsp;
However, if more than one dimension is located in the same file, they need to be distinguished from one another.&nbsp;
The file iteration mechanism provides the macro <b>BOOST_PP_ITERATION_DEPTH</b> for this purpose:
At point <i>A</i>, <b>BOOST_PP_ITERATION</b>() refers to <code>i</code>.&nbsp; <b>BOOST_PP_ITERATION_START</b>()
and <b>BOOST_PP_ITERATION_FINISH</b>() refer to <code>start(1)</code> and <code>finish(1)</code>
respectively.&nbsp; At point <i>B</i>, however, <b>BOOST_PP_ITERATION</b>()
refers to <code>j</code>--the <i>current</i> iteration value at point <i>B</i>.&nbsp;
The same is true for <b>BOOST_PP_ITERATION_START</b>() which refers to <code>start(2)</code>,
etc..
</div>
<div class="code"><pre>
<div>
If separate files are used for each dimension, then there are no major
problems, and using multiple dimensions is straightforward.&nbsp; However, if
more than one dimension is located in the same file, they need to be
distinguished from one another.&nbsp; The file iteration mechanism provides the
macro <b>BOOST_PP_ITERATION_DEPTH</b> for this purpose:
</div>
<div class="code">
<pre>
// file.h
#if !BOOST_PP_IS_ITERATING
@ -417,25 +478,29 @@ for (int i = start(1); i <= finish(1); ++i) {
- BOOST_PP_ITERATION()
#endif
</pre></div>
</pre>
</div>
<div>
This will result to the following:
</div>
<div><pre>
<div>
<pre>
+ 1
- 1
- 2
+ 2
- 1
- 2
</pre></div>
<div>
Multiple dimensions raise another question.&nbsp;
How does one access the state of dimensions <i>other</i> than the current dimension?&nbsp;
In other words, how does one access <code>i</code> at point <i>A</i>?&nbsp;
Because of the preprocessor's lazy evaluation, this <i>doesn't</i> work....
</pre>
</div>
<div class="code"><pre>
<div>
Multiple dimensions raise another question.&nbsp; How does one access the state
of dimensions <i>other</i> than the current dimension?&nbsp; In other words,
how does one access <code>i</code> at point <i>A</i>?&nbsp; Because of the
preprocessor's lazy evaluation, this <i>doesn't</i> work....
</div>
<div class="code">
<pre>
// ...
#elif BOOST_PP_ITERATION_DEPTH() == 1
@ -456,25 +521,31 @@ for (int i = start(1); i <= finish(1); ++i) {
#undef I
#endif
</pre></div>
</pre>
</div>
<div>
The problem here is that <code>I</code> refers to <b>BOOST_PP_ITERATION</b>(),
not to the <i>value</i> of <b>BOOST_PP_ITERATION</b>() at the point of <code>I</code>'s definition.
not to the <i>value</i> of <b>BOOST_PP_ITERATION</b>() at the point of <code>I</code>'s
definition.
</div>
<div>
The library provides macros to access these values in two ways--absolutely or relatively.&nbsp;
The first variety accesses a value of a specific iteration frame (i.e. dimension).&nbsp;
To access the iteration value of the first dimension--from <i>any</i> dimension--<b>BOOST_PP_FRAME_ITERATION</b>(<i>1</i>) is used.&nbsp;
To access the iteration value of the second dimension, <b>BOOST_PP_FRAME_ITERATION</b>(<i>2</i>) is used, and so on.&nbsp;
The library provides macros to access these values in two ways--absolutely or
relatively.&nbsp; The first variety accesses a value of a specific iteration
frame (i.e. dimension).&nbsp; To access the iteration value of the first
dimension--from <i>any</i> dimension--<b>BOOST_PP_FRAME_ITERATION</b>(<i>1</i>)
is used.&nbsp; To access the iteration value of the second dimension, <b>BOOST_PP_FRAME_ITERATION</b>(<i>2</i>)
is used, and so on.&nbsp;
</div>
<div>
There are also frame versions to access the lower bound, the upper bound, and the flags of a dimension:&nbsp;
<b>BOOST_PP_FRAME_START</b>, <b>BOOST_PP_FRAME_FINISH</b>, and <b>BOOST_PP_FRAME_FLAGS</b>.
There are also frame versions to access the lower bound, the upper bound, and
the flags of a dimension:&nbsp; <b>BOOST_PP_FRAME_START</b>, <b>BOOST_PP_FRAME_FINISH</b>,
and <b>BOOST_PP_FRAME_FLAGS</b>.
</div>
<div>
So, to fix the last example, we modify the definition of <code>I</code>....
</div>
<div class="code"><pre>
<div class="code">
<pre>
// ...
#elif BOOST_PP_ITERATION_DEPTH() == 1
@ -482,49 +553,61 @@ for (int i = start(1); i <= finish(1); ++i) {
#define I BOOST_PP_FRAME_ITERATION(1)
// ...
</pre></div>
<div>
The library also provides macros to access values in dimensions <i>relative</i> to the current dimension (e.g. the <i>previous</i> dimension).&nbsp;
These macros take an argument that is interpreted as an offset from the current frame.&nbsp;
For example, <b>BOOST_PP_RELATIVE_ITERATION</b>(<i>1</i>) always refers to the outer dimension immediately previous to the current dimension.&nbsp;
An argument of <i>0</i> is interpreted as an offset of <i>0</i> which causes
<b>BOOST_PP_RELATIVE_ITERATION</b>(<i>0</i>) to be equivalent to <b>BOOST_PP_ITERATION</b>().&nbsp;
<b>BOOST_PP_RELATIVE_ITERATION</b>(<i>2</i>) refers to the iteration value of the dimension immediately preceding
the dimension that precedes the current dimension.&nbsp;
</pre>
</div>
<div>
The lower and upper bounds of a dimension can be accessed in this fashion as well
with <b>BOOST_PP_RELATIVE_START</b> and <b>BOOST_PP_RELATIVE_FINISH</b>.&nbsp;
The library also provides macros to access values in dimensions <i>relative</i>
to the current dimension (e.g. the <i>previous</i> dimension).&nbsp; These
macros take an argument that is interpreted as an offseq from the current
frame.&nbsp; For example, <b>BOOST_PP_RELATIVE_ITERATION</b>(<i>1</i>) always
refers to the outer dimension immediately previous to the current
dimension.&nbsp; An argument of <i>0</i> is interpreted as an offseq of <i>0</i>
which causes <b>BOOST_PP_RELATIVE_ITERATION</b>(<i>0</i>) to be equivalent to <b>BOOST_PP_ITERATION</b>().&nbsp;
<b>BOOST_PP_RELATIVE_ITERATION</b>(<i>2</i>) refers to the iteration value of
the dimension immediately preceding the dimension that precedes the current
dimension.&nbsp;
</div>
<div>
The lower and upper bounds of a dimension can be accessed in this fashion as
well with <b>BOOST_PP_RELATIVE_START</b> and <b>BOOST_PP_RELATIVE_FINISH</b>.&nbsp;
The flags of a relative dimension can be accessed with <b>BOOST_PP_RELATIVE_FLAGS</b>.
</div>
<h4>Relativity</h4>
<h4>
Relativity
</h4>
<div>
I mentioned earlier that there is a reason that there are two ways to parametize the mechanism.&nbsp;
The reason is dimensional abstraction.&nbsp;
In certain situations the dimension is unknown by the code that is being iterated--possibly
because the code is reused at multiple, different dimensions.&nbsp;
If that code needs to iterate again, it has to define the right parameters (based on the dimension) for the mechanism to consume.&nbsp;
I mentioned earlier that there is a reason that there are two ways to
parametize the mechanism.&nbsp; The reason is dimensional abstraction.&nbsp; In
certain situations the dimension is unknown by the code that is being
iterated--possibly because the code is reused at multiple, different
dimensions.&nbsp; If that code needs to iterate again, it has to define the
right parameters (based on the dimension) for the mechanism to consume.&nbsp;
</div>
<div>
All of the macro state maintained by the mechanism can be referred to in an indirect way relative to a dimension.&nbsp;
This is the purpose of the <b>BOOST_PP_RELATIVE_</b> accessors.&nbsp;
All of the macro state maintained by the mechanism can be referred to in an
indirect way relative to a dimension.&nbsp; This is the purpose of the <b>BOOST_PP_RELATIVE_</b>
accessors.&nbsp;
</div>
<div>
Likewise, the user-defined <i>named external arguments</i> can be defined this way as well--<i>except</i> the name of the file to iterate.&nbsp;
Because the lower and upper boundaries are <i>evaluated</i> by the mechanism, the implementation no longer needs
the macro <b>BOOST_PP_ITERATION_LIMITS</b>, and the identifier can be reused for each dimension of iteration.&nbsp;
Likewise, the user-defined <i>named external arguments</i> can be defined this
way as well--<i>except</i> the name of the file to iterate.&nbsp; Because the
lower and upper boundaries are <i>evaluated</i> by the mechanism, the
implementation no longer needs the macro <b>BOOST_PP_ITERATION_LIMITS</b>, and
the identifier can be reused for each dimension of iteration.&nbsp;
</div>
<div>
Unfortunately, the filename is a different story.&nbsp;
The library has no way to evaluate the quoted (or angle-bracketed) text.&nbsp;
Therefore, it has to use a different macro for each dimension.&nbsp;
That is the purpose of the <b>BOOST_PP_FILENAME_<i>x</i></b> macros.&nbsp;
They exist to isolate the only non-abstractable piece of data required by the mechanism.&nbsp;
Unfortunately, the filename is a different story.&nbsp; The library has no way
to evaluate the quoted (or angle-bracketed) text.&nbsp; Therefore, it has to
use a different macro for each dimension.&nbsp; That is the purpose of the <b>BOOST_PP_FILENAME_<i>x</i></b>
macros.&nbsp; They exist to isolate the only non-abstractable piece of data
required by the mechanism.&nbsp;
</div>
<div>
In order to define the filename in an abstract fashion, you need to do something like this:
In order to define the filename in an abstract fashion, you need to do
something like this:
</div>
<div class="code"><pre>
<div class="code">
<pre>
#define UNIQUE_TO_FILE "some_file.h"
#if BOOST_PP_ITERATION_DEPTH() == 0
@ -537,14 +620,16 @@ for (int i = start(1); i <= finish(1); ++i) {
// ... up to BOOST_PP_LIMIT_ITERATION_DIM
#endif
</pre></div>
</pre>
</div>
<div>
The intent is to avoid having to do this for anything but the filename.&nbsp;
If this needs to be done more than once in a file
(<b>BOOST_PP_FILENAME_<i>x</i></b> is undefined by the mechanism after it is used.),
consider using a separate file to make the proper definition:
If this needs to be done more than once in a file (<b>BOOST_PP_FILENAME_<i>x</i></b>
is undefined by the mechanism after it is used.), consider using a separate
file to make the proper definition:
</div>
<div class="code"><pre>
<div class="code">
<pre>
# // detail/define_file_h.h
# ifndef FILE_H
# error FILE_H is not defined
@ -563,11 +648,13 @@ for (int i = start(1); i <= finish(1); ++i) {
# else
# error unsupported iteration dimension
# endif
</pre></div>
</pre>
</div>
<div>
And then use it like this....
</div>
<div class="code"><pre>
<div class="code">
<pre>
// file.h
#if !BOOST_PP_IS_ITERATING
@ -584,65 +671,83 @@ for (int i = start(1); i <= finish(1); ++i) {
#else
// iterated portion
#endif
</pre></div>
<div>
With a little effort like this, it is possible to maintain the abstraction without the code bloat that would
otherwise be required.&nbsp;
Unfortunately, this is not a completely general solution as it would need to be done for each unique filename,
but it is better than nothing.
</pre>
</div>
<h4>Conclusion</h4>
<div>
With a little effort like this, it is possible to maintain the abstraction
without the code bloat that would otherwise be required.&nbsp; Unfortunately,
this is not a completely general solution as it would need to be done for each
unique filename, but it is better than nothing.
</div>
<h4>
Conclusion
</h4>
<div>
That about covers the facilities that are available from the mechanism.&nbsp;
Using these facilities, let's implement a <code>function_traits</code> template to demonstrate a full-fledge
use of the mechanism.
Using these facilities, let's implement a <code>function_traits</code> template
to demonstrate a full-fledge use of the mechanism.
</div>
<h4>Function Traits - An Involved Example</h4>
<h4>
Function Traits - An Involved Example
</h4>
<div>
Implementing a comprehensive <code>function_traits</code> template metafunction requires the use
of every major part of the file iteration mechanism.&nbsp;
Implementing a comprehensive <code>function_traits</code> template metafunction
requires the use of every major part of the file iteration mechanism.&nbsp;
</div>
<div>
(This example makes no attempt of work around compiler deficiencies and exists only to illustrate the mechanism.)
(This example makes no attempt of work around compiler deficiencies and exists
only to illustrate the mechanism.)
</div>
<div>
The result should have the following features:
</div>
<ul>
<li>return type</li>
<li>number and types of parameters</li>
<li>whether or not the type is a pointer-to-function, reference-to-function, pointer-to-member-function, or a plain function type</li>
<li>whether the type has an ellipsis</li>
<li>if not a pointer-to-member-function, the equivalent pointer-to-function, reference-to-function, and function type</li>
<li>otherwise, the pointer-to-member type, the class type to which it refers, and whether it is const and/or volatile qualified</li>
<li>
return type</li>
<li>
number and types of parameters</li>
<li>
whether or not the type is a pointer-to-function, reference-to-function,
pointer-to-member-function, or a plain function type</li>
<li>
whether the type has an ellipsis</li>
<li>
if not a pointer-to-member-function, the equivalent pointer-to-function,
reference-to-function, and function type</li>
<li>
otherwise, the pointer-to-member type, the class type to which it refers, and
whether it is const and/or volatile qualified</li>
</ul>
<div>
There are a myriad of ways that this can be implemented.&nbsp;
I'll give a brief summary here of what is happening in the implementation below.&nbsp;
There are a myriad of ways that this can be implemented.&nbsp; I'll give a
brief summary here of what is happening in the implementation below.&nbsp;
</div>
<div>
The implementation inherently has to deal with function arity.&nbsp;
Therefore, at minimum, we need to iterate over function arities and define partial specializations of
the primary template <code>function_traits</code>.&nbsp;
The situation is further complicated by variadic functions (i.e. functions with an ellipsis).&nbsp;
Therefore, for every arity, we need a variadic version as well.
The implementation inherently has to deal with function arity.&nbsp; Therefore,
at minimum, we need to iterate over function arities and define partial
specializations of the primary template <code>function_traits</code>.&nbsp; The
situation is further complicated by variadic functions (i.e. functions with an
ellipsis).&nbsp; Therefore, for every arity, we need a variadic version as
well.
</div>
<div>
We also need to handle pointers-to-member-functions.&nbsp;
This implies that we have to handle not just arity and variadics, but also cv-qualifications.&nbsp;
We also need to handle pointers-to-member-functions.&nbsp; This implies that we
have to handle not just arity and variadics, but also cv-qualifications.&nbsp;
</div>
<div>
For the sake of clarity, the implementation below handles function types and pointers-to-member-functions
separately.&nbsp;
They could be merged, but the result would be significantly messier.
For the sake of clarity, the implementation below handles function types and
pointers-to-member-functions separately.&nbsp; They could be merged, but the
result would be significantly messier.
</div>
<div>
To handle function types, the implementation below iterates over function arities.&nbsp;
For each arity, it iterates over each parameter to provide access to each individually.&nbsp;
It then re-includes itself to define a variadic specialization of the same arity.&nbsp;
It performs the rough equivalent of the following pseudo-code:
To handle function types, the implementation below iterates over function
arities.&nbsp; For each arity, it iterates over each parameter to provide
access to each individually.&nbsp; It then re-includes itself to define a
variadic specialization of the same arity.&nbsp; It performs the rough
equivalent of the following pseudo-code:
</div>
<div class="code"><pre>
<div class="code">
<pre>
void make_spec(int i, bool variadic) {
:open function_traits&lt;i, variadic&gt;
for (int j = 0; j < i; ++j) {
@ -661,15 +766,17 @@ void function_types(int max_arity) {
}
return;
}
</pre></div>
</pre>
</div>
<div>
The implementation of pointers-to-member-functions is a bit different.&nbsp;
First, it iterates over cv-qualifiers.&nbsp;
For each cv-qualifier, it iterates over function arities.&nbsp;
For each function arity, it iterates again over each parameter.&nbsp;
It then re-includes itself to define a variadic specialization of the same arity....
First, it iterates over cv-qualifiers.&nbsp; For each cv-qualifier, it iterates
over function arities.&nbsp; For each function arity, it iterates again over
each parameter.&nbsp; It then re-includes itself to define a variadic
specialization of the same arity....
</div>
<div class="code"><pre>
<div class="code">
<pre>
void make_spec(int j, const char* cv, bool variadic) {
:open function_traits&lt;j, cv, variadic&gt;
for (int k = 0; k < j; ++k) {
@ -696,13 +803,15 @@ void pointers_to_members(int max_arity) {
}
return;
}
</pre></div>
<div>
Here is the complete implementation.&nbsp;
This example represents the power of the file iteration mechanism as well as the library in general,
so follow it carefully if you wish to fully understand what the mechanism does....
</pre>
</div>
<div class="code"><pre>
<div>
Here is the complete implementation.&nbsp; This example represents the power of
the file iteration mechanism as well as the library in general, so follow it
carefully if you wish to fully understand what the mechanism does....
</div>
<div class="code">
<pre>
// function_traits.hpp
#if !BOOST_PP_IS_ITERATING
@ -899,23 +1008,30 @@ template&lt;class T&gt; struct function_traits&lt;T&amp;&gt; : function_traits&l
#undef X
#endif
</pre></div>
</pre>
</div>
<div>
One problem that still exists is the lack of support for <code>throw</code> specifications.&nbsp;
There is no way that we can completely handle it anyway because we cannot partially specialize
on <code>throw</code> specifications.&nbsp;
However, we could accurately report the "actual" function type, etc., including the <code>throw</code>
specification (which the above implementation doesn't do, as it reconstructs those types).&nbsp;
If you like, you can figure out how to do that on your own as an exercise.&nbsp;
There is no way that we can completely handle it anyway because we cannot
partially specialize on <code>throw</code> specifications.&nbsp; However, we
could accurately report the "actual" function type, etc., including the <code>throw</code>
specification (which the above implementation doesn't do, as it reconstructs
those types).&nbsp; If you like, you can figure out how to do that on your own
as an exercise.&nbsp;
</div>
<!--<h4>Related Topics</h4>
<ul>
<li><a href="choosing_repetition.html">Choosing Between Repetition Constructs</a></li>
</ul>-->
<h4>See Also</h4>
<h4>
See Also
</h4>
<ul>
<li><a href="../ref/iterate.html">BOOST_PP_ITERATE</a></li>
<li>
<a href="../ref/iterate.html">BOOST_PP_ITERATE</a></li>
</ul>
<div class="sig">- Paul Mensonides</div>
<div class="sig">
- Paul Mensonides
</div>
</body>
</html>