diff --git a/doc/data.html b/doc/data.html
index f1dc401..c3e45ea 100644
--- a/doc/data.html
+++ b/doc/data.html
@@ -9,6 +9,7 @@
Arrays
diff --git a/doc/data/lists.html b/doc/data/lists.html
index 3f0fabb..98a32c9 100644
--- a/doc/data/lists.html
+++ b/doc/data/lists.html
@@ -2,7 +2,6 @@
lists.html
-
Lists
diff --git a/doc/data/sets.html b/doc/data/sets.html
new file mode 100644
index 0000000..7747d43
--- /dev/null
+++ b/doc/data/sets.html
@@ -0,0 +1,57 @@
+
+
+ sets.html
+
+
+
+ Sets
+
+ A set is a group of adjacent parenthesized elements.
+ For example,
+
+
+ (a )(b )(c )
+
+
+ ...is a set of 3 elements--a , b , and c .
+
+
+ Sets are data structures that merge the properties of both lists and tuples
+ with the exception that sets cannot be empty.
+ Therefore, an "empty" set is considered a special case scenario that must be handled separately in C++.
+
+
+#define SET (x)(y)(z)
+#define REVERSE(s, state, elem) (elem) state
+ // append to head ^
+
+BOOST_PP_SET_FOLD_LEFT(REVERSE, BOOST_PP_EMPTY, SET)()
+ // #1 #2
+ // 1) placeholder for "empty" set
+ // 2) remove placeholder
+
+#define SET_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)
+ // ^
+ // special placeholder that will be "eaten"
+ // by appending to the tail
+
+
+ Sets are extremely efficient.
+ Element access speed approaches random access--even with sets of up to 256 elements.
+ This is because element access (among other things) is implemented iteratively rather than recursively.
+ Therefore, elements can be accessed at extremely high indices even on preprocessors with low maximum expansion depths.
+
+
+ Elements of a set can be extracted with
+ BOOST_PP_SET_ELEM .
+
+ Primitives
+
+
+
diff --git a/doc/data/tuples.html b/doc/data/tuples.html
index ca01b2e..ee1db6c 100644
--- a/doc/data/tuples.html
+++ b/doc/data/tuples.html
@@ -2,7 +2,6 @@
tuples.html
-
Tuples
diff --git a/doc/headers.html b/doc/headers.html
index 5ab7183..70716c6 100644
--- a/doc/headers.html
+++ b/doc/headers.html
@@ -156,6 +156,33 @@
selection/
max.hpp
min.hpp
+ set.hpp
+ set/
+ cat.hpp
+ elem.hpp
+ enum.hpp
+ filter.hpp
+ first_n.hpp
+ fold_left.hpp
+ fold_right.hpp
+ for_each.hpp
+ for_each_i.hpp
+ for_each_product.hpp
+ insert.hpp
+ pop_back.hpp
+ pop_front.hpp
+ push_back.hpp
+ push_front.hpp
+ remove.hpp
+ replace.hpp
+ rest_n.hpp
+ reverse.hpp
+ set.hpp
+ size.hpp
+ subset.hpp
+ to_array.hpp
+ to_tuple.hpp
+ transform.hpp
slot.hpp
slot/
slot.hpp
@@ -166,6 +193,7 @@
rem.hpp
reverse.hpp
to_list.hpp
+ to_set.hpp
stringize.hpp
while.hpp*
diff --git a/doc/headers/config/limits.hpp.html b/doc/headers/config/limits.hpp.html
index 794eae8..b728d13 100644
--- a/doc/headers/config/limits.hpp.html
+++ b/doc/headers/config/limits.hpp.html
@@ -19,6 +19,7 @@
BOOST_PP_LIMIT_ITERATION_DIM
BOOST_PP_LIMIT_MAG
BOOST_PP_LIMIT_REPEAT
+ BOOST_PP_LIMIT_SET
BOOST_PP_LIMIT_SLOT_COUNT
BOOST_PP_LIMIT_SLOT_SIG
BOOST_PP_LIMIT_TUPLE
diff --git a/doc/headers/set.hpp.html b/doc/headers/set.hpp.html
new file mode 100644
index 0000000..9fed5cb
--- /dev/null
+++ b/doc/headers/set.hpp.html
@@ -0,0 +1,43 @@
+
+
+ set.hpp
+
+
+
+
+ The set.hpp includes the headers in the set folder.
+
+ Usage
+
+ #include <boost/preprocessor/set.hpp>
+
+ Includes
+
+
+
diff --git a/doc/headers/set/cat.hpp.html b/doc/headers/set/cat.hpp.html
new file mode 100644
index 0000000..eb2f4bf
--- /dev/null
+++ b/doc/headers/set/cat.hpp.html
@@ -0,0 +1,20 @@
+
+
+ set/cat.hpp
+
+
+
+
+ The set/cat.hpp header defines macros for concatenating all elements in a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/cat.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/elem.hpp.html b/doc/headers/set/elem.hpp.html
new file mode 100644
index 0000000..b16aa19
--- /dev/null
+++ b/doc/headers/set/elem.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/elem.hpp
+
+
+
+
+ The set/elem.hpp header defines a macro to extract an element from a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/elem.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/enum.hpp.html b/doc/headers/set/enum.hpp.html
new file mode 100644
index 0000000..ccb5432
--- /dev/null
+++ b/doc/headers/set/enum.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/enum.hpp
+
+
+
+
+ The set/enum.hpp header defines a macro to enumerate the elements in a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/enum.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/filter.hpp.html b/doc/headers/set/filter.hpp.html
new file mode 100644
index 0000000..be89274
--- /dev/null
+++ b/doc/headers/set/filter.hpp.html
@@ -0,0 +1,20 @@
+
+
+ set/filter.hpp
+
+
+
+
+ The set/filter.hpp header defines macros to filter a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/filter.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/first_n.hpp.html b/doc/headers/set/first_n.hpp.html
new file mode 100644
index 0000000..280fe5d
--- /dev/null
+++ b/doc/headers/set/first_n.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/first_n.hpp
+
+
+
+
+ The set/first_n.hpp header defines a macro that returns the first N elements of a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/first_n.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/fold_left.hpp.html b/doc/headers/set/fold_left.hpp.html
new file mode 100644
index 0000000..6b483a5
--- /dev/null
+++ b/doc/headers/set/fold_left.hpp.html
@@ -0,0 +1,20 @@
+
+
+ set/fold_left.hpp
+
+
+
+
+ The set/fold_left.hpp header defines macros for folding (or accumulating) a set left-to-right.
+
+ Usage
+
+ #include <boost/preprocessor/set/fold_left.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/fold_right.hpp.html b/doc/headers/set/fold_right.hpp.html
new file mode 100644
index 0000000..f62cea3
--- /dev/null
+++ b/doc/headers/set/fold_right.hpp.html
@@ -0,0 +1,20 @@
+
+
+ set/fold_right.hpp
+
+
+
+
+ The set/fold_right.hpp header defines macros for folding (or accumulating) a set right-to-left.
+
+ Usage
+
+ #include <boost/preprocessor/set/fold_right.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/for_each.hpp.html b/doc/headers/set/for_each.hpp.html
new file mode 100644
index 0000000..3433bd2
--- /dev/null
+++ b/doc/headers/set/for_each.hpp.html
@@ -0,0 +1,20 @@
+
+
+ set/for_each.hpp
+
+
+
+
+ The set/for_each.hpp header defines macros to repeat a macro for each element in a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/for_each.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/for_each_i.hpp.html b/doc/headers/set/for_each_i.hpp.html
new file mode 100644
index 0000000..0ff50e2
--- /dev/null
+++ b/doc/headers/set/for_each_i.hpp.html
@@ -0,0 +1,20 @@
+
+
+ set/for_each_i.hpp
+
+
+
+
+ The set/for_each_i.hpp header defines macros to repeat a macro for each element in a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/for_each_i.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/for_each_product.hpp.html b/doc/headers/set/for_each_product.hpp.html
new file mode 100644
index 0000000..62e33a2
--- /dev/null
+++ b/doc/headers/set/for_each_product.hpp.html
@@ -0,0 +1,20 @@
+
+
+ set/for_each_product.hpp
+
+
+
+
+ The set/for_each_product.hpp header defines macros to repeat a macro for each cartesian product of several sets .
+
+ Usage
+
+ #include <boost/preprocessor/set/for_each_product.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/insert.hpp.html b/doc/headers/set/insert.hpp.html
new file mode 100644
index 0000000..afc7d47
--- /dev/null
+++ b/doc/headers/set/insert.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/insert.hpp
+
+
+
+
+ The set/insert.hpp header defines a macro to insert an element into a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/insert.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/pop_back.hpp.html b/doc/headers/set/pop_back.hpp.html
new file mode 100644
index 0000000..5c0c747
--- /dev/null
+++ b/doc/headers/set/pop_back.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/pop_back.hpp
+
+
+
+
+ The set/pop_back.hpp header defines a macro to pop the last element off a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/pop_back.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/pop_front.hpp.html b/doc/headers/set/pop_front.hpp.html
new file mode 100644
index 0000000..438d623
--- /dev/null
+++ b/doc/headers/set/pop_front.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/pop_front.hpp
+
+
+
+
+ The set/pop_front.hpp header defines a macro to pop the first element off a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/pop_front.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/push_back.hpp.html b/doc/headers/set/push_back.hpp.html
new file mode 100644
index 0000000..9491f1a
--- /dev/null
+++ b/doc/headers/set/push_back.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/push_back.hpp
+
+
+
+
+ The set/push_back.hpp header defines a macro to append an element to a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/push_back.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/push_front.hpp.html b/doc/headers/set/push_front.hpp.html
new file mode 100644
index 0000000..cccbc18
--- /dev/null
+++ b/doc/headers/set/push_front.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/push_front.hpp
+
+
+
+
+ The set/push_front.hpp header defines a macro to prepend an element to a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/push_front.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/remove.hpp.html b/doc/headers/set/remove.hpp.html
new file mode 100644
index 0000000..61a3580
--- /dev/null
+++ b/doc/headers/set/remove.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/remove.hpp
+
+
+
+
+ The set/remove.hpp header defines a macro to remove an element from a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/remove.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/replace.hpp.html b/doc/headers/set/replace.hpp.html
new file mode 100644
index 0000000..453e45d
--- /dev/null
+++ b/doc/headers/set/replace.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/replace.hpp
+
+
+
+
+ The set/replace.hpp header defines a macro to replace an element in a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/replace.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/rest_n.hpp.html b/doc/headers/set/rest_n.hpp.html
new file mode 100644
index 0000000..9cb2063
--- /dev/null
+++ b/doc/headers/set/rest_n.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/rest_n.hpp
+
+
+
+
+ The set/rest_n.hpp header defines a macro for extracting a group of elements from the end of a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/rest_n.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/reverse.hpp.html b/doc/headers/set/reverse.hpp.html
new file mode 100644
index 0000000..94e9817
--- /dev/null
+++ b/doc/headers/set/reverse.hpp.html
@@ -0,0 +1,20 @@
+
+
+ set/reverse.hpp
+
+
+
+
+ The set/reverse.hpp header defines macros to reverse a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/reverse.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/set.hpp.html b/doc/headers/set/set.hpp.html
new file mode 100644
index 0000000..6920a65
--- /dev/null
+++ b/doc/headers/set/set.hpp.html
@@ -0,0 +1,21 @@
+
+
+ set/set.hpp
+
+
+
+
+ The set/set.hpp header defines basic primitives for manipulating sets .
+
+ Usage
+
+ #include <boost/preprocessor/set/set.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/size.hpp.html b/doc/headers/set/size.hpp.html
new file mode 100644
index 0000000..2231438
--- /dev/null
+++ b/doc/headers/set/size.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/size.hpp
+
+
+
+
+ The set/size.hpp header defines a macro to calculate the size of a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/size.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/subset.hpp.html b/doc/headers/set/subset.hpp.html
new file mode 100644
index 0000000..6224951
--- /dev/null
+++ b/doc/headers/set/subset.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/subset.hpp
+
+
+
+
+ The set/subset.hpp header defines a macro that extracts a subset from a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/subset.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/to_array.hpp.html b/doc/headers/set/to_array.hpp.html
new file mode 100644
index 0000000..309ab11
--- /dev/null
+++ b/doc/headers/set/to_array.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/to_array.hpp
+
+
+
+
+ The set/to_array.hpp header defines a macro that converts a set to an array .
+
+ Usage
+
+ #include <boost/preprocessor/set/to_array.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/to_tuple.hpp.html b/doc/headers/set/to_tuple.hpp.html
new file mode 100644
index 0000000..71b26df
--- /dev/null
+++ b/doc/headers/set/to_tuple.hpp.html
@@ -0,0 +1,19 @@
+
+
+ set/to_tuple.hpp
+
+
+
+
+ The set/to_tuple.hpp header defines a macro that converts a set to an tuple .
+
+ Usage
+
+ #include <boost/preprocessor/set/to_tuple.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/set/transform.hpp.html b/doc/headers/set/transform.hpp.html
new file mode 100644
index 0000000..c104193
--- /dev/null
+++ b/doc/headers/set/transform.hpp.html
@@ -0,0 +1,20 @@
+
+
+ set/transform.hpp
+
+
+
+
+ The set/transform.hpp header defines macros to transform a set .
+
+ Usage
+
+ #include <boost/preprocessor/set/transform.hpp>
+
+ Contents
+
+
+
diff --git a/doc/headers/tuple/rem.hpp.html b/doc/headers/tuple/rem.hpp.html
index 996dd0f..61bb24c 100644
--- a/doc/headers/tuple/rem.hpp.html
+++ b/doc/headers/tuple/rem.hpp.html
@@ -14,6 +14,7 @@
Contents
diff --git a/doc/headers/tuple/to_set.hpp.html b/doc/headers/tuple/to_set.hpp.html
new file mode 100644
index 0000000..bdd0e42
--- /dev/null
+++ b/doc/headers/tuple/to_set.hpp.html
@@ -0,0 +1,19 @@
+
+
+ tuple/to_set.hpp
+
+
+
+
+ The tuple/to_set.hpp header defines a macro that converts a tuple to a set .
+
+ Usage
+
+ #include <boost/preprocessor/tuple/to_set.hpp>
+
+ Contents
+
+
+
diff --git a/doc/ref.html b/doc/ref.html
index b7c73ae..064f6d5 100644
--- a/doc/ref.html
+++ b/doc/ref.html
@@ -117,6 +117,7 @@
LIMIT_ITERATION_DIM
LIMIT_MAG
LIMIT_REPEAT
+ LIMIT_SET
LIMIT_SLOT_COUNT
LIMIT_SLOT_SIG
LIMIT_TUPLE
@@ -208,6 +209,42 @@
RPAREN
RPAREN_IF
+ SET_CAT
+ SET_CAT_S
+ SET_ELEM
+ SET_ENUM
+ SET_FILTER
+ SET_FILTER_S
+ SET_FIRST_N
+ SET_FOLD_LEFT
+ SET_FOLD_LEFT_s
+ SET_FOLD_RIGHT
+ SET_FOLD_RIGHT_s
+ SET_FOR_EACH
+ SET_FOR_EACH_I
+ SET_FOR_EACH_I_R
+ SET_FOR_EACH_PRODUCT
+ SET_FOR_EACH_PRODUCT_R
+ SET_FOR_EACH_R
+ SET_HEAD
+ SET_INSERT
+ SET_NIL
+ SET_POP_BACK
+ SET_POP_FRONT
+ SET_PUSH_BACK
+ SET_PUSH_FRONT
+ SET_REMOVE
+ SET_REPLACE
+ SET_REST_N
+ SET_REVERSE
+ SET_REVERSE_S
+ SET_SIZE
+ SET_SUBSET
+ SET_TAIL
+ SET_TO_ARRAY
+ SET_TO_TUPLE
+ SET_TRANSFORM
+ SET_TRANSFORM_S
SLOT
STRINGIZE
SUB
@@ -216,8 +253,10 @@
TUPLE_EAT
TUPLE_ELEM
TUPLE_REM
+ TUPLE_REM_CTOR
TUPLE_REVERSE
TUPLE_TO_LIST
+ TUPLE_TO_SET
VALUE
diff --git a/doc/ref/limit_set.html b/doc/ref/limit_set.html
new file mode 100644
index 0000000..beff5fa
--- /dev/null
+++ b/doc/ref/limit_set.html
@@ -0,0 +1,23 @@
+
+
+ BOOST_PP_LIMIT_SET
+
+
+
+
+ The BOOST_PP_LIMIT_SET macro defines the maximum set size supported by the library.
+
+ Usage
+
+ BOOST_PP_LIMIT_SET
+
+ Remarks
+
+ This macro currently expands to 256 .
+
+ Requirements
+
+
+
diff --git a/doc/ref/list_for_each_i.html b/doc/ref/list_for_each_i.html
index 99a5464..75f78e1 100644
--- a/doc/ref/list_for_each_i.html
+++ b/doc/ref/list_for_each_i.html
@@ -16,7 +16,7 @@
macro
A macro of the form macro (r , data , i , elem ).
- This macro is expanded by BOOST_PP_LIST_FOR_EACH with each element in list .
+ This macro is expanded by BOOST_PP_LIST_FOR_EACH_I with each element in list .
It is expanded with the next available BOOST_PP_FOR repetition, the auxiliary data , the index of the current element, and the current element.
data
diff --git a/doc/ref/set_cat.html b/doc/ref/set_cat.html
new file mode 100644
index 0000000..a1b73fb
--- /dev/null
+++ b/doc/ref/set_cat.html
@@ -0,0 +1,45 @@
+
+
+ BOOST_PP_SET_CAT
+
+
+
+
+ The BOOST_PP_SET_CAT macro concatenates all elements in a set .
+
+ Usage
+
+ BOOST_PP_SET_CAT (list )
+
+ Arguments
+
+ set
+
+ The set whose elements are to be concatenated.
+
+
+ Remarks
+
+ Elements are concatenated left-to-right starting with index 0 .
+
+
+ For maximum efficiency, use BOOST_PP_SET_CAT_S .
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_cat_s.html b/doc/ref/set_cat_s.html
new file mode 100644
index 0000000..79300d0
--- /dev/null
+++ b/doc/ref/set_cat_s.html
@@ -0,0 +1,39 @@
+
+
+ BOOST_PP_SET_CAT_S
+
+
+
+
+ The BOOST_PP_SET_CAT_S macro concatenates all elements in a set .
+ It reenters BOOST_PP_SET_FOLD_LEFT with maximum efficiency.
+
+ Usage
+
+ BOOST_PP_SET_CAT_S (s , list )
+
+ Arguments
+
+ s
+
+ The next available BOOST_PP_SET_FOLD_LEFT fold step.
+
+ set
+
+ The set whose elements are to be concatenated.
+
+
+ Remarks
+
+ Elements are concatenated left-to-right starting with index 0 .
+
+ See Also
+
+ Requirements
+
+
+
diff --git a/doc/ref/set_elem.html b/doc/ref/set_elem.html
new file mode 100644
index 0000000..4653c9f
--- /dev/null
+++ b/doc/ref/set_elem.html
@@ -0,0 +1,55 @@
+
+
+ BOOST_PP_SET_ELEM
+
+
+
+
+ The BOOST_PP_SET_ELEM macro extracts an element from a set .
+
+ Usage
+
+ BOOST_PP_SET_ELEM (i , list )
+
+ Arguments
+
+ i
+
+ The zero-based index of the element to be extracted.
+
+ set
+
+ The set from which an element is to be extracted.
+
+
+ Remarks
+
+ The index i must be in the range of 0 to BOOST_PP_SET_SIZE (set ) - 1 .
+
+ Requirements
+
+ Sample Code
+
+#include <boost/preprocessor/set/elem.hpp >
+
+BOOST_PP_SET_ELEM (1, (a)(b)(c)) // expands to b
+
+#define SET \
+ (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) \
+ (30)(31)(32)(33)(34)(35)(36)(37)(38)(39) \
+ (40)(41)(42)(43)(44)(45)(46)(47)(48)(49) \
+ (50)(51)(52)(53)(54)(55)(56)(57)(58)(59) \
+ (60)(61)(62)(63)(64)(65)(66)(67)(68)(69) \
+ (70)(71)(72)(73)(74)(75)(76)(77)(78)(79) \
+ (80)(81)(82)(83)(84)(85)(86)(87)(88)(89) \
+ (90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \
+ /**/
+
+BOOST_PP_SET_ELEM (88, SET) // expands to 88
+
+
+
diff --git a/doc/ref/set_enum.html b/doc/ref/set_enum.html
new file mode 100644
index 0000000..39a7b7e
--- /dev/null
+++ b/doc/ref/set_enum.html
@@ -0,0 +1,42 @@
+
+
+ BOOST_PP_SET_ENUM
+
+
+
+
+ The BOOST_PP_SET_ENUM macro enumerates the elements in a set .
+
+ Usage
+
+ BOOST_PP_SET_ENUM (set )
+
+ Arguments
+
+ set
+
+ The set from whose elements are to be enumerated.
+
+
+ Remarks
+
+ This macro expands to a comma-separated list of the elements in
set .
+ For example,
BOOST_PP_SET_ENUM ((
x )(
y )(
z )) expands to...
+
+ x , y , z
+
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_filter.html b/doc/ref/set_filter.html
new file mode 100644
index 0000000..d381d2e
--- /dev/null
+++ b/doc/ref/set_filter.html
@@ -0,0 +1,63 @@
+
+
+ BOOST_PP_SET_FILTER
+
+
+
+
+ The BOOST_PP_SET_FILTER macro filters a set according to a supplied criterion.
+
+ Usage
+
+ BOOST_PP_SET_FILTER (pred , data , set )
+
+ Arguments
+
+ pred
+
+ A ternary predicate of the form pred (s , data , elem ).
+ This predicate is expanded by BOOST_PP_SET_FILTER for each element in set with the next available BOOST_PP_SET_FOLD_LEFT fold step,
+ the auxiliary data , and the current element in set .
+ This macro must return a integral value in the range of 0 to BOOST_PP_LIMIT_MAG .
+ If this predicate expands to non-zero for a certain element, that element is included in the resulting set .
+
+ data
+
+ Auxiliary data passed to pred .
+
+ set
+
+ The set to be filtered.
+
+
+ Remarks
+
+ This macro expands pred for each element in set .
+ It builds a new set out of each element for which pred returns non-zero.
+
+
+ For maximum efficiency, use BOOST_PP_SET_FILTER_S .
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_filter_s.html b/doc/ref/set_filter_s.html
new file mode 100644
index 0000000..02b1cc7
--- /dev/null
+++ b/doc/ref/set_filter_s.html
@@ -0,0 +1,53 @@
+
+
+ BOOST_PP_SET_FILTER_S
+
+
+
+
+ The BOOST_PP_SET_FILTER_S macro filters a set according to a supplied criterion.
+ It reenters BOOST_PP_SET_FOLD_LEFT with maximum efficiency.
+
+ Usage
+
+ BOOST_PP_SET_FILTER_S (s , pred , data , set )
+
+ Arguments
+
+ s
+
+ The next available BOOST_PP_SET_FOLD_LEFT fold step.
+
+ pred
+
+ A ternary predicate of the form pred (s , data , elem ).
+ This predicate is expanded by BOOST_PP_SET_FILTER for each element in set with the next available BOOST_PP_SET_FOLD_LEFT fold step,
+ the auxiliary data , and the current element in set .
+ This macro must return a integral value in the range of 0 to BOOST_PP_LIMIT_MAG .
+ If this predicate expands to non-zero for a certain element, that element is included in the resulting set .
+
+ data
+
+ Auxiliary data passed to pred .
+
+ set
+
+ The set to be filtered.
+
+
+ Remarks
+
+ This macro expands pred for each element in set .
+ It builds a new set out of each element for which pred returns non-zero.
+
+ See Also
+
+ Requirements
+
+
+
diff --git a/doc/ref/set_first_n.html b/doc/ref/set_first_n.html
new file mode 100644
index 0000000..2c73099
--- /dev/null
+++ b/doc/ref/set_first_n.html
@@ -0,0 +1,46 @@
+
+
+ BOOST_PP_SET_FIRST_N
+
+
+
+
+ The BOOST_PP_SET_FIRST_N macro expands to a set of the first n elements of a set .
+
+ Usage
+
+ BOOST_PP_SET_FIRST_N (n , list )
+
+ Arguments
+
+ n
+
+ The number of elements to extract.
+
+ list
+
+ The set from which the elements are extracted.
+
+
+ Remarks
+
+ This macro extracts n elements from the beginning of set and returns them as a new set
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_fold_left.html b/doc/ref/set_fold_left.html
new file mode 100644
index 0000000..b339f51
--- /dev/null
+++ b/doc/ref/set_fold_left.html
@@ -0,0 +1,62 @@
+
+
+ BOOST_PP_SET_FOLD_LEFT
+
+
+
+
+ The BOOST_PP_SET_FOLD_LEFT macro folds (or accumulates) the elements of a set left-to-right.
+
+ Usage
+
+ BOOST_PP_SET_FOLD_LEFT (op , state , set )
+
+ Arguments
+
+ op
+
+ A ternary operation of the form op (s , state , elem ).
+ This macro is called for each element in set --each time returning a new state .
+ This operation is expanded by BOOST_PP_SET_FOLD_LEFT with the next available fold step,
+ the current state , and the current element.
+
+ state
+
+ The initial state of the fold.
+
+ set
+
+ The set to be folded.
+
+
+ Remarks
+
+ For the
set , (
0 )(
1 )(
2 ), this macro expands to:
+
+ op (s , op (s , op (s , state , 0 ), 1 ), 2 )
+
+
+
+ For maximum efficiency, BOOST_PP_SET_FOLD_LEFT can be reentered with BOOST_PP_SET_FOLD_LEFT_s .
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_fold_left_s.html b/doc/ref/set_fold_left_s.html
new file mode 100644
index 0000000..002bad2
--- /dev/null
+++ b/doc/ref/set_fold_left_s.html
@@ -0,0 +1,68 @@
+
+
+ BOOST_PP_SET_FOLD_LEFT_s
+
+
+
+
+ The BOOST_PP_SET_FOLD_LEFT_s macro folds (or accumulates) the elements of a set left-to-right.
+ It reenters BOOST_PP_SET_FOLD_LEFT with maximum efficiency.
+
+ Usage
+
+ BOOST_PP_SET_FOLD_LEFT_ ## s (op , state , set )
+
+ Arguments
+
+ s
+
+ The next available BOOST_PP_SET_FOLD_LEFT fold step.
+
+ op
+
+ A ternary operation of the form op (s , state , elem ).
+ This macro is called for each element in set --each time returning a new state .
+ This operation is expanded by BOOST_PP_SET_FOLD_LEFT with the next available fold step,
+ the current state , and the current element.
+
+ state
+
+ The initial state of the fold.
+
+ set
+
+ The set to be folded.
+
+
+ Remarks
+
+ For the
set , (
0 )(
1 )(
2 ), this macro expands to:
+
+ op (s , op (s , op (s , state , 0 ), 1 ), 2 )
+
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_fold_right.html b/doc/ref/set_fold_right.html
new file mode 100644
index 0000000..da56135
--- /dev/null
+++ b/doc/ref/set_fold_right.html
@@ -0,0 +1,64 @@
+
+
+ BOOST_PP_SET_FOLD_RIGHT
+
+
+
+
+ The BOOST_PP_SET_FOLD_RIGHT macro folds (or accumulates) the elements of a set right-to-left.
+
+ Usage
+
+ BOOST_PP_SET_FOLD_RIGHT (op , state , set )
+
+ Arguments
+
+ op
+
+ A ternary operation of the form op (s , state , elem ).
+ This macro is called for each element in set --each time returning a new state .
+ This operation is expanded by BOOST_PP_SET_FOLD_RIGHT with the next available fold step,
+ the current state , and the current element.
+
+ state
+
+ The initial state of the fold.
+
+ set
+
+ The set to be folded.
+
+
+ Remarks
+
+ For the
set , (
0 )(
1 )(
2 ), this macro expands to:
+
+ op (s , op (s , op (s , state , 2 ), 1 ), 0 )
+
+
+
+ For maximum efficiency, BOOST_PP_SET_FOLD_RIGHT can be reentered with BOOST_PP_SET_FOLD_RIGHT_s .
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_fold_right_s.html b/doc/ref/set_fold_right_s.html
new file mode 100644
index 0000000..aa7607c
--- /dev/null
+++ b/doc/ref/set_fold_right_s.html
@@ -0,0 +1,69 @@
+
+
+ BOOST_PP_SET_FOLD_RIGHT_s
+
+
+
+
+ The BOOST_PP_SET_FOLD_RIGHT_s macro folds (or accumulates) the elements of a set right-to-left.
+ It reenters BOOST_PP_SET_FOLD_RIGHT with maximum efficiency.
+
+ Usage
+
+ BOOST_PP_SET_FOLD_RIGHT_ ## s (op , state , set )
+
+ Arguments
+
+ s
+
+ The next available BOOST_PP_SET_FOLD_LEFT fold step.
+
+ op
+
+ A ternary operation of the form op (s , state , elem ).
+ This macro is called for each element in set --each time returning a new state .
+ This operation is expanded by BOOST_PP_SET_FOLD_RIGHT with the next available fold step,
+ the current state , and the current element.
+
+ state
+
+ The initial state of the fold.
+
+ set
+
+ The set to be folded.
+
+
+ Remarks
+
+ For the
set , (
0 )(
1 )(
2 ), this macro expands to:
+
+ op (s , op (s , op (s , state , 2 ), 1 ), 0 )
+
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_for_each.html b/doc/ref/set_for_each.html
new file mode 100644
index 0000000..37d0573
--- /dev/null
+++ b/doc/ref/set_for_each.html
@@ -0,0 +1,62 @@
+
+
+ BOOST_PP_SET_FOR_EACH
+
+
+
+
+ The BOOST_PP_SET_FOR_EACH macro repeats a macro for each element in a set .
+
+ Usage
+
+ BOOST_PP_SET_FOR_EACH (macro , data , set )
+
+ Arguments
+
+ macro
+
+ A ternary macro of the form macro (r , data , elem ).
+ This macro is expanded by BOOST_PP_SET_FOR_EACH with each element in set .
+ It is expanded with the next available BOOST_PP_FOR repetition, the auxiliary data , and the current element.
+
+ data
+
+ Auxiliary data passed to macro .
+
+ set
+
+ The set for which macro will be invoked on each element.
+
+
+ Remarks
+
+ This macro is a repetition construct.
+ If
set is (
a )(
b )(
c ), it expands to the sequence:
+
+ macro (r , data , a ) macro (r , data , b ) macro (r , data , c )
+
+
+
+ For maximum efficiency, use BOOST_PP_SET_FOR_EACH_R .
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_for_each_i.html b/doc/ref/set_for_each_i.html
new file mode 100644
index 0000000..cad16e4
--- /dev/null
+++ b/doc/ref/set_for_each_i.html
@@ -0,0 +1,62 @@
+
+
+ BOOST_PP_SET_FOR_EACH_I
+
+
+
+
+ The BOOST_PP_SET_FOR_EACH_I macro repeats a macro for each element in a set .
+
+ Usage
+
+ BOOST_PP_SET_FOR_EACH_I (macro , data , set )
+
+ Arguments
+
+ macro
+
+ A macro of the form macro (r , data , i , elem ).
+ This macro is expanded by BOOST_PP_SET_FOR_EACH_I with each element in set .
+ It is expanded with the next available BOOST_PP_FOR repetition, the auxiliary data , the index of the current element, and the current element.
+
+ data
+
+ Auxiliary data passed to macro .
+
+ set
+
+ The set for which macro will be invoked on each element.
+
+
+ Remarks
+
+ This macro is a repetition construct.
+ If
set is (
a )(
b )(
c ), it expands to the sequence:
+
+ macro (r , data , 0 , a ) macro (r , data , 1 , b ) macro (r , data , 2 , c )
+
+
+
+ For maximum efficiency, use BOOST_PP_SET_FOR_EACH_I_R
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_for_each_i_r.html b/doc/ref/set_for_each_i_r.html
new file mode 100644
index 0000000..2ae499e
--- /dev/null
+++ b/doc/ref/set_for_each_i_r.html
@@ -0,0 +1,53 @@
+
+
+ BOOST_PP_SET_FOR_EACH_I_R
+
+
+
+
+ The BOOST_PP_SET_FOR_EACH_I_R macro repeats a macro for each element in a set .
+ It reenters BOOST_PP_FOR with maximum efficiency.
+
+ Usage
+
+ BOOST_PP_SET_FOR_EACH_I_R (r , macro , data , set )
+
+ Arguments
+
+ r
+
+ The next available BOOST_PP_FOR repetition.
+
+ macro
+
+ A macro of the form macro (r , data , i , elem ).
+ This macro is expanded by BOOST_PP_SET_FOR_EACH_I with each element in set .
+ It is expanded with the next available BOOST_PP_FOR repetition, the auxiliary data , the index of the current element, and the current element.
+
+ data
+
+ Auxiliary data passed to macro .
+
+ set
+
+ The set for which macro will be invoked on each element.
+
+
+ Remarks
+
+ This macro is a repetition construct.
+ If
set is (
a )(
b )(
c ), it expands to the sequence:
+
+ macro (r , data , 0 , a ) macro (r , data , 1 , b ) macro (r , data , 2 , c )
+
+
+ See Also
+
+ Requirements
+
+
+
diff --git a/doc/ref/set_for_each_product.html b/doc/ref/set_for_each_product.html
new file mode 100644
index 0000000..a836314
--- /dev/null
+++ b/doc/ref/set_for_each_product.html
@@ -0,0 +1,73 @@
+
+
+ BOOST_PP_SET_FOR_EACH_PRODUCT
+
+
+
+
+ The BOOST_PP_SET_FOR_EACH_PRODUCT macro repeats a macro for each cartesian product of several sets .
+
+ Usage
+
+ BOOST_PP_SET_FOR_EACH_PRODUCT (macro , sets )
+
+ Arguments
+
+ macro
+
+ The binary macro of the form macro (r , product ).
+ This macro is expanded by BOOST_PP_FOR_EACH_PRODUCT with each cartesian product in sets .
+ It is expanded with the next available BOOST_PP_FOR repetition and a set containing a cartesian product.
+
+ sets
+
+ A set of sets from which cartesian products are obtained.
+
+
+ Remarks
+
+ This macro is a repetition construct.
+ If two
sets are (
a )(
b )(
c ) and (
x )(
y )(
z ),
+ this macro will produce the following sequence:
+
+ macro (r , (a )(x ))
+ macro (r , (a )(y ))
+ macro (r , (a )(z )) \
+ macro (r , (b )(x ))
+ macro (r , (b )(y ))
+ macro (r , (b )(z )) \
+ macro (r , (c )(x ))
+ macro (r , (c )(y ))
+ macro (r , (c )(z ))
+
+
+
+ For maximum efficiency, use BOOST_PP_SET_FOR_EACH_PRODUCT_R .
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+#include <boost/preprocessor/set/for_each_product.hpp >
+#include <boost/preprocessor/set/to_tuple.hpp >
+
+#define S1 (a)(b)(c)
+#define S2 (x)(y)(z)
+#define S3 (p)(q)
+
+#define MACRO(r, product) BOOST_PP_SET_TO_TUPLE (product)
+
+BOOST_PP_SET_FOR_EACH_PRODUCT (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)
+
+
+
diff --git a/doc/ref/set_for_each_product_r.html b/doc/ref/set_for_each_product_r.html
new file mode 100644
index 0000000..df65d36
--- /dev/null
+++ b/doc/ref/set_for_each_product_r.html
@@ -0,0 +1,58 @@
+
+
+ BOOST_PP_SET_FOR_EACH_PRODUCT_R
+
+
+
+
+ The BOOST_PP_SET_FOR_EACH_PRODUCT_R macro repeats a macro for each cartesian product of several sets .
+ It reenters BOOST_PP_FOR with maximum efficiency.
+
+ Usage
+
+ BOOST_PP_SET_FOR_EACH_PRODUCT_R (r , macro , sets )
+
+ Arguments
+
+ r
+
+ The next available BOOST_PP_FOR repetition.
+
+ macro
+
+ The binary macro of the form macro (r , product ).
+ This macro is expanded by BOOST_PP_FOR_EACH_PRODUCT with each cartesian product in sets .
+ It is expanded with the next available BOOST_PP_FOR repetition and a set containing a cartesian product.
+
+ sets
+
+ A set of sets from which cartesian products are obtained.
+
+
+ Remarks
+
+ This macro is a repetition construct.
+ If two
sets are (
a )(
b )(
c ) and (
x )(
y )(
z ),
+ this macro will produce the following sequence:
+
+ macro (r , (a )(x ))
+ macro (r , (a )(y ))
+ macro (r , (a )(z )) \
+ macro (r , (b )(x ))
+ macro (r , (b )(y ))
+ macro (r , (b )(z )) \
+ macro (r , (c )(x ))
+ macro (r , (c )(y ))
+ macro (r , (c )(z ))
+
+
+ See Also
+
+ Requirements
+
+
+
diff --git a/doc/ref/set_for_each_r.html b/doc/ref/set_for_each_r.html
new file mode 100644
index 0000000..de600f9
--- /dev/null
+++ b/doc/ref/set_for_each_r.html
@@ -0,0 +1,53 @@
+
+
+ BOOST_PP_SET_FOR_EACH_R
+
+
+
+
+ The BOOST_PP_SET_FOR_EACH_R macro repeats a macro for each element in a set .
+ It reenters BOOST_PP_FOR with maximum efficiency.
+
+ Usage
+
+ BOOST_PP_SET_FOR_EACH_R (r , macro , data , set )
+
+ Arguments
+
+ r
+
+ The next available BOOST_PP_FOR repetition.
+
+ macro
+
+ A ternary macro of the form macro (r , data , elem ).
+ This macro is expanded by BOOST_PP_SET_FOR_EACH with each element in set .
+ It is expanded with the next available BOOST_PP_FOR repetition, the auxiliary data , and the current element.
+
+ data
+
+ Auxiliary data passed to macro .
+
+ set
+
+ The set for which macro will be invoked on each element.
+
+
+ Remarks
+
+ This macro is a repetition construct.
+ If
set is (
a )(
b )(
c ), it expands to the sequence:
+
+ macro (r , data , a ) macro (r , data , b ) macro (r , data , c )
+
+
+ See Also
+
+ Requirements
+
+
+
diff --git a/doc/ref/set_head.html b/doc/ref/set_head.html
new file mode 100644
index 0000000..9cfac73
--- /dev/null
+++ b/doc/ref/set_head.html
@@ -0,0 +1,39 @@
+
+
+ BOOST_PP_SET_HEAD
+
+
+
+
+ The BOOST_PP_SET_HEAD macro expands to the first element in a set .
+
+ Usage
+
+ BOOST_PP_SET_HEAD (set )
+
+ Arguments
+
+ set
+
+ The set from which the first element is extracted.
+
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_insert.html b/doc/ref/set_insert.html
new file mode 100644
index 0000000..7731f0d
--- /dev/null
+++ b/doc/ref/set_insert.html
@@ -0,0 +1,47 @@
+
+
+ BOOST_PP_SET_INSERT
+
+
+
+
+ The BOOST_PP_SET_INSERT macro inserts an element into an set .
+
+ Usage
+
+ BOOST_PP_SET_INSERT (set , i , elem )
+
+ Arguments
+
+ set
+
+ The set into which an element is to be inserted.
+
+ i
+
+ The zero-based position in set where an element is to be inserted.
+ Valid values range from 0 to BOOST_PP_SET_SIZE (set ) - 1 .
+
+ elem
+
+ The element to insert.
+
+
+ Remarks
+
+ This macro inserts elem before the element at index i .
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_nil.html b/doc/ref/set_nil.html
new file mode 100644
index 0000000..11ee413
--- /dev/null
+++ b/doc/ref/set_nil.html
@@ -0,0 +1,69 @@
+
+
+ BOOST_PP_SET_NIL
+
+
+
+
+ The BOOST_PP_SET_NIL macro is a placeholder macro for an empty set .
+ It is only valid if it is elements are appended to the end of this empty "set."
+
+ Usage
+
+ BOOST_PP_SET_NIL
+
+ Remarks
+
+ This macro is a utility macro intended as a empty starting point for appending to the tail.
+ It is not a nil set .
+ When an element is appended to this macro, it expands on the element and to the element--thereby removing itself.
+ For example, both BOOST_PP_SET_NIL (x )
+ and BOOST_PP_SET_PUSH_BACK (BOOST_PP_SET_NIL , x ) expand to x .
+
+
+ If any BOOST_PP_SET_ * macro (other than BOOST_PP_SET_PUSH_BACK ) is invoked with an argument that contains BOOST_PP_SET_NIL ,
+ the behavior is undefined and in most cases will result in obscure errors.
+
+
+ The closest thing available to BOOST_PP_SET_NIL for appending to the head is BOOST_PP_EMPTY .
+ After all the elements have been prepended, empty parenthesis can be invoked on the tail to remove the BOOST_PP_EMPTY .
+ As with BOOST_PP_SET_NIL , passing an argument that contains BOOST_PP_EMPTY to any BOOST_PP_SET_ * macro (other than BOOST_PP_SET_PUSH_FRONT ) is undefined.
+
+
+ (It is also possible to start with an extra element and pop it off when you have finished appending to it.)
+
+
+ In C99, neither of these macros are necessary since it is legal to pass empty arguments.
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_pop_back.html b/doc/ref/set_pop_back.html
new file mode 100644
index 0000000..1f00277
--- /dev/null
+++ b/doc/ref/set_pop_back.html
@@ -0,0 +1,42 @@
+
+
+ BOOST_PP_SET_POP_BACK
+
+
+
+
+ The BOOST_PP_SET_POP_BACK macro pops an element from the end of a set .
+
+ Usage
+
+ BOOST_PP_SET_POP_BACK (set )
+
+ Arguments
+
+ set
+
+ The set to pop an element from.
+
+
+ Remarks
+
+ This macro returns set after removing the last element.
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_pop_front.html b/doc/ref/set_pop_front.html
new file mode 100644
index 0000000..18a217a
--- /dev/null
+++ b/doc/ref/set_pop_front.html
@@ -0,0 +1,42 @@
+
+
+ BOOST_PP_SET_POP_FRONT
+
+
+
+
+ The BOOST_PP_SET_POP_FRONT macro pops an element from the beginning of a set .
+
+ Usage
+
+ BOOST_PP_SET_POP_FRONT (set )
+
+ Arguments
+
+ set
+
+ The set to pop an element from.
+
+
+ Remarks
+
+ This macro returns set after removing the first element.
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_push_back.html b/doc/ref/set_push_back.html
new file mode 100644
index 0000000..d2f1bb3
--- /dev/null
+++ b/doc/ref/set_push_back.html
@@ -0,0 +1,50 @@
+
+
+ BOOST_PP_SET_PUSH_BACK
+
+
+
+
+ The BOOST_PP_SET_PUSH_BACK macro pushes an element onto the end of a set .
+
+ Usage
+
+ BOOST_PP_SET_PUSH_BACK (set , elem )
+
+ Arguments
+
+ set
+
+ The set onto which elem is pushed.
+
+ elem
+
+ The element to push onto the end of set .
+
+
+ Remarks
+
+ This macro returns set after appending elem .
+
+
+ This macro is an explicit form of directly appending an element.
+ In other words, BOOST_PP_SET_PUSH_BACK (set , x ) is equivalent to set (x ).
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_push_front.html b/doc/ref/set_push_front.html
new file mode 100644
index 0000000..8518488
--- /dev/null
+++ b/doc/ref/set_push_front.html
@@ -0,0 +1,50 @@
+
+
+ BOOST_PP_SET_PUSH_FRONT
+
+
+
+
+ The BOOST_PP_SET_PUSH_FRONT macro pushes an element onto the beginning of a set .
+
+ Usage
+
+ BOOST_PP_SET_PUSH_FRONT (set , elem )
+
+ Arguments
+
+ set
+
+ The set onto which elem is pushed.
+
+ elem
+
+ The element to push onto the beginning of set .
+
+
+ Remarks
+
+ This macro returns set after prepending elem .
+
+
+ This macro is an explicit form of directly prepending an element.
+ In other words, BOOST_PP_SET_PUSH_FRONT (set , x ) is equivalent to (x )set .
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_remove.html b/doc/ref/set_remove.html
new file mode 100644
index 0000000..4643316
--- /dev/null
+++ b/doc/ref/set_remove.html
@@ -0,0 +1,43 @@
+
+
+ BOOST_PP_SET_REMOVE
+
+
+
+
+ The BOOST_PP_SET_REMOVE macro removes an element from a set .
+
+ Usage
+
+ BOOST_PP_SET_REMOVE (set , i )
+
+ Arguments
+
+ set
+
+ The set from which an element is to be removed.
+
+ i
+
+ The zero-based position in set of the element to be removed.
+ Valid values range from 0 to BOOST_PP_SET_SIZE (set ) - 1 .
+
+
+ Remarks
+
+ This macro returns set after removing the element at index i .
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_replace.html b/doc/ref/set_replace.html
new file mode 100644
index 0000000..d2281f4
--- /dev/null
+++ b/doc/ref/set_replace.html
@@ -0,0 +1,47 @@
+
+
+ BOOST_PP_SET_REPLACE
+
+
+
+
+ The BOOST_PP_SET_REPLACE macro replaces an element in a set .
+
+ Usage
+
+ BOOST_PP_SET_RPLACE (set , i , elem )
+
+ Arguments
+
+ set
+
+ The set in which an element is to be replaced.
+
+ i
+
+ The zero-based position in set of the element to be replaced.
+ Valid values range from 0 to BOOST_PP_SET_SIZE (set ) - 1 .
+
+ elem
+
+ The element to replace the element at index i within set .
+
+
+ Remarks
+
+ This macro returns set after replacing the element at index i with elem .
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_rest_n.html b/doc/ref/set_rest_n.html
new file mode 100644
index 0000000..58055f5
--- /dev/null
+++ b/doc/ref/set_rest_n.html
@@ -0,0 +1,92 @@
+
+
+ BOOST_PP_SET_REST_N
+
+
+
+
+ The BOOST_PP_SET_REST_N macro expands to a set of all but the first n elements of a set .
+
+ Usage
+
+ BOOST_PP_SET_REST_N (n , list )
+
+ Arguments
+
+ n
+
+ The number of elements to remove.
+
+ list
+
+ The set from which the elements are to be removed.
+
+
+ Remarks
+
+ This macro extracts n elements from the beginning of set and returns the remainder of set as a new set
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+#include <boost/preprocessor/arithmetic/inc.hpp >
+#include <boost/preprocessor/set/elem.hpp >
+#include <boost/preprocessor/set/first_n.hpp >
+#include <boost/preprocessor/set/rest_n.hpp >
+#include <boost/preprocessor/set/size.hpp >
+
+#define NUMBERS \
+ (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) \
+ (30)(31)(32)(33)(34)(35)(36)(37)(38)(39) \
+ (40)(41)(42)(43)(44)(45)(46)(47)(48)(49) \
+ (50)(51)(52)(53)(54)(55)(56)(57)(58)(59) \
+ (60)(61)(62)(63)(64)(65)(66)(67)(68)(69) \
+ (70)(71)(72)(73)(74)(75)(76)(77)(78)(79) \
+ (80)(81)(82)(83)(84)(85)(86)(87)(88)(89) \
+ (90)(91)(92)(93)(94)(95)(96)(97)(98)(99) \
+ (100)(101)(102)(103)(104)(105)(106)(107)(108)(109) \
+ (110)(111)(112)(113)(114)(115)(116)(117)(118)(119) \
+ (120)(121)(122)(123)(124)(125)(126)(127)(128)(129) \
+ (130)(131)(132)(133)(134)(135)(136)(137)(138)(139) \
+ (140)(141)(142)(143)(144)(145)(146)(147)(148)(149) \
+ (150)(151)(152)(153)(154)(155)(156)(157)(158)(159) \
+ (160)(161)(162)(163)(164)(165)(166)(167)(168)(169) \
+ (170)(171)(172)(173)(174)(175)(176)(177)(178)(179) \
+ (180)(181)(182)(183)(184)(185)(186)(187)(188)(189) \
+ (190)(191)(192)(193)(194)(195)(196)(197)(198)(199) \
+ (200)(201)(202)(203)(204)(205)(206)(207)(208)(209) \
+ (210)(211)(212)(213)(214)(215)(216)(217)(218)(219) \
+ (220)(221)(222)(223)(224)(225)(226)(227)(228)(229) \
+ (230)(231)(232)(233)(234)(235)(236)(237)(238)(239) \
+ (240)(241)(242)(243)(244)(245)(246)(247)(248)(249) \
+ (250)(251)(252)(253)(254)(255)(256) \
+ /**/
+
+#define SUPER_ADD(x, y) BOOST_PP_SET_ELEM (y, BOOST_PP_SET_REST_N (x, NUMBERS))
+
+SUPER_ADD(100, 100) // expands to 200
+
+#define SUPER_SUB(x, y) \
+ BOOST_PP_SET_SIZE ( \
+ BOOST_PP_SET_REST_N ( \
+ BOOST_PP_INC (y), \
+ BOOST_PP_SET_FIRST_N ( \
+ BOOST_PP_INC (x), NUMBERS \
+ ) \
+ ) \
+ ) \
+ /**/
+
+SUPER_SUB(67, 25) // expands to 42
+
+
+
diff --git a/doc/ref/set_reverse.html b/doc/ref/set_reverse.html
new file mode 100644
index 0000000..07a8720
--- /dev/null
+++ b/doc/ref/set_reverse.html
@@ -0,0 +1,42 @@
+
+
+ BOOST_PP_SET_REVERSE
+
+
+
+
+ The BOOST_PP_SET_REVERSE macro reverses a set .
+
+ Usage
+
+ BOOST_PP_SET_REVERSE (set )
+
+ Arguments
+
+ set
+
+ The set to be reversed.
+
+
+ Remarks
+
+ For maximum efficiency, use BOOST_PP_SET_REVERSE_S .
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_reverse_s.html b/doc/ref/set_reverse_s.html
new file mode 100644
index 0000000..8c8736f
--- /dev/null
+++ b/doc/ref/set_reverse_s.html
@@ -0,0 +1,35 @@
+
+
+ BOOST_PP_SET_REVERSE_S
+
+
+
+
+ The BOOST_PP_SET_REVERSE_S macro reverses a set .
+ It reenters BOOST_PP_SET_FOLD_LEFT with maximum efficiency.
+
+ Usage
+
+ BOOST_PP_SET_REVERSE_S (s , set )
+
+ Arguments
+
+ s
+
+ The next available BOOST_PP_SET_FOLD_LEFT fold step.
+
+ set
+
+ The set to be reversed.
+
+
+ See Also
+
+ Requirements
+
+
+
diff --git a/doc/ref/set_size.html b/doc/ref/set_size.html
new file mode 100644
index 0000000..ac0f54f
--- /dev/null
+++ b/doc/ref/set_size.html
@@ -0,0 +1,34 @@
+
+
+ BOOST_PP_SET_SIZE
+
+
+
+
+ The BOOST_PP_SET_SIZE macro expands to the size of a set .
+
+ Usage
+
+ BOOST_PP_SET_SIZE (set )
+
+ Arguments
+
+ set
+
+ The set whose size is to be calculated.
+
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_subset.html b/doc/ref/set_subset.html
new file mode 100644
index 0000000..a5b1a65
--- /dev/null
+++ b/doc/ref/set_subset.html
@@ -0,0 +1,46 @@
+
+
+ BOOST_PP_SET_SUBSET
+
+
+
+
+ The BOOST_PP_SET_SUBSET macro expands to a subset of elements in a set .
+
+ Usage
+
+ BOOST_PP_SET_SUBSET (set , i , len )
+
+ Arguments
+
+ set
+
+ The set whose size is to be calculated.
+
+ i
+
+ The index of the first element of the subset to be extracted.
+
+ len
+
+ The length of the subset to be extracted.
+
+
+ Remarks
+
+ This macro expands to a set extracted from set .
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_tail.html b/doc/ref/set_tail.html
new file mode 100644
index 0000000..9c742e2
--- /dev/null
+++ b/doc/ref/set_tail.html
@@ -0,0 +1,39 @@
+
+
+ BOOST_PP_SET_TAIL
+
+
+
+
+ The BOOST_PP_SET_HEAD macro expands to all but the first element of a set .
+
+ Usage
+
+ BOOST_PP_SET_TAIL (set )
+
+ Arguments
+
+ set
+
+ The set from which the tail is extracted.
+
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_to_array.html b/doc/ref/set_to_array.html
new file mode 100644
index 0000000..2643136
--- /dev/null
+++ b/doc/ref/set_to_array.html
@@ -0,0 +1,34 @@
+
+
+ BOOST_PP_SET_TO_ARRAY
+
+
+
+
+ The BOOST_PP_SET_TO_ARRAY macro converts a set to an array .
+
+ Usage
+
+ BOOST_PP_SET_TO_ARRAY (set )
+
+ Arguments
+
+ set
+
+ The set to be converted.
+
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_to_tuple.html b/doc/ref/set_to_tuple.html
new file mode 100644
index 0000000..1210886
--- /dev/null
+++ b/doc/ref/set_to_tuple.html
@@ -0,0 +1,34 @@
+
+
+ BOOST_PP_SET_TO_TUPLE
+
+
+
+
+ The BOOST_PP_SET_TO_TUPLE macro converts a set to an tuple .
+
+ Usage
+
+ BOOST_PP_SET_TO_TUPLE (set )
+
+ Arguments
+
+ set
+
+ The set to be converted.
+
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_transform.html b/doc/ref/set_transform.html
new file mode 100644
index 0000000..2fad2bb
--- /dev/null
+++ b/doc/ref/set_transform.html
@@ -0,0 +1,65 @@
+
+
+ BOOST_PP_SET_TRANSFORM
+
+
+
+
+ The BOOST_PP_SET_TRANSFORM macro transforms each element in a set according to a supplied transformation.
+
+ Usage
+
+ BOOST_PP_SET_TRANSFORM (op , data , set )
+
+ Arguments
+
+ op
+
+ A ternary predicate of the form op (s , data , elem ).
+ This transformation is expanded by BOOST_PP_SET_TRANSFORM for each element in set with the next available BOOST_PP_SET_FOLD_LEFT fold step,
+ the auxiliary data , and the current element in set .
+
+ data
+
+ Auxiliary data passed to pred .
+
+ set
+
+ The set to be transformed.
+
+
+ Remarks
+
+ This macro expands
op for each element in
set .
+ It builds a new
set out of the results of each call.
+ If, for example,
set is (
a )(
b )(
c ),
+ this macro expands to...
+
+ (op (d , data , a ))(op (d , data , b ))(op (d , data , c ))
+
+
+
+ For maximum efficiency, use BOOST_PP_SET_TRANSFORM_S .
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/set_transform_s.html b/doc/ref/set_transform_s.html
new file mode 100644
index 0000000..b1383a2
--- /dev/null
+++ b/doc/ref/set_transform_s.html
@@ -0,0 +1,55 @@
+
+
+ BOOST_PP_SET_TRANSFORM_S
+
+
+
+
+ The BOOST_PP_SET_TRANSFORM_S macro transforms each element in a set according to a supplied transformation.
+ It reenters BOOST_PP_SET_FOLD_LEFT with maximum efficiency.
+
+ Usage
+
+ BOOST_PP_SET_TRANSFORM_S (s , op , data , set )
+
+ Arguments
+
+ s
+
+ The next available BOOST_PP_SET_FOLD_LEFT fold step.
+
+ op
+
+ A ternary predicate of the form op (s , data , elem ).
+ This transformation is expanded by BOOST_PP_SET_TRANSFORM for each element in set with the next available BOOST_PP_SET_FOLD_LEFT fold step,
+ the auxiliary data , and the current element in set .
+
+ data
+
+ Auxiliary data passed to pred .
+
+ set
+
+ The set to be transformed.
+
+
+ Remarks
+
+ This macro expands
op for each element in
set .
+ It builds a new
set out of the results of each call.
+ If, for example,
set is (
a )(
b )(
c ),
+ this macro expands to...
+
+ (op (d , data , a ))(op (d , data , b ))(op (d , data , c ))
+
+
+ See Also
+
+ Requirements
+
+
+
diff --git a/doc/ref/tuple_rem_ctor.html b/doc/ref/tuple_rem_ctor.html
new file mode 100644
index 0000000..5f00a5b
--- /dev/null
+++ b/doc/ref/tuple_rem_ctor.html
@@ -0,0 +1,45 @@
+
+
+ BOOST_PP_TUPLE_REM_CTOR
+
+
+
+
+ The BOOST_PP_TUPLE_REM_CTOR macro removes the parentheses from a tuple of the specified size.
+
+ Usage
+
+ BOOST_PP_TUPLE_REM_CTOR (size , tuple )
+
+ Arguments
+
+ size
+
+ The size of the tuple from which the parentheses are to be removed.
+ Valid tuple sizes range from 0 to BOOST_PP_LIMIT_TUPLE .
+
+ tuple
+
+ The tuple from which the parenthesis are removed.
+
+
+ Remarks
+
+ The size argument must be the actual size of tuple .
+
+ See Also
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/ref/tuple_to_set.html b/doc/ref/tuple_to_set.html
new file mode 100644
index 0000000..c6da0dd
--- /dev/null
+++ b/doc/ref/tuple_to_set.html
@@ -0,0 +1,36 @@
+
+
+ BOOST_PP_TUPLE_TO_SET
+
+
+
+
+ The BOOST_PP_TUPLE_TO_SET macro converts a tuple to an set .
+
+ Usage
+
+ BOOST_PP_TUPLE_TO_SET (size , tuple )
+
+ Arguments
+
+ size
+
+ The number of elements in tuple .
+
+ tuple
+
+ The tuple to be converted.
+
+
+ Requirements
+
+ Sample Code
+
+
+
diff --git a/doc/syntax.html b/doc/syntax.html
index bb0ba15..ed1f3ef 100644
--- a/doc/syntax.html
+++ b/doc/syntax.html
@@ -6,210 +6,232 @@
Identifiers for Syntax Highlighting
-BOOST_PP_ADD
-BOOST_PP_ADD_D
-BOOST_PP_AND
-BOOST_PP_APPLY
-BOOST_PP_ARRAY_DATA
-BOOST_PP_ARRAY_ELEM
-BOOST_PP_ARRAY_SIZE
-BOOST_PP_ASSERT
-BOOST_PP_ASSERT_MSG
-BOOST_PP_ASSIGN_SLOT
-
-BOOST_PP_BITAND
-BOOST_PP_BITNOR
-BOOST_PP_BITOR
-BOOST_PP_BITXOR
-BOOST_PP_BOOL
-
-BOOST_PP_CAT
-BOOST_PP_COMMA
-BOOST_PP_COMMA_IF
-BOOST_PP_COMPL
-BOOST_PP_CONFIG_EXTENDED_LINE_INFO
-
-BOOST_PP_DEC
-BOOST_PP_DEDUCE_D
-BOOST_PP_DEDUCE_R
-BOOST_PP_DEDUCE_Z
-BOOST_PP_DIV
-BOOST_PP_DIV_D
-
-BOOST_PP_EMPTY
-BOOST_PP_ENUM
-BOOST_PP_ENUM_BINARY_PARAMS
-BOOST_PP_ENUM_BINARY_PARAMS_Z
-BOOST_PP_ENUM_PARAMS
-BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT
-BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS
-BOOST_PP_ENUM_PARAMS_Z
-BOOST_PP_ENUM_SHIFTED
-BOOST_PP_ENUM_SHIFTED_PARAMS
-BOOST_PP_ENUM_SHIFTED_PARAMS_Z
-BOOST_PP_ENUM_SHIFTED_
-BOOST_PP_ENUM_TRAILING
-BOOST_PP_ENUM_TRAILING_BINARY_PARAMS
-BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z
-BOOST_PP_ENUM_TRAILING_PARAMS
-BOOST_PP_ENUM_TRAILING_PARAMS_Z
-BOOST_PP_ENUM_TRAILING_
-BOOST_PP_ENUM_
-BOOST_PP_EQUAL
-BOOST_PP_EQUAL_D
-BOOST_PP_EXPAND
-BOOST_PP_EXPR_IF
-BOOST_PP_EXPR_IIF
-
-BOOST_PP_FILENAME_x
-BOOST_PP_FOR
-BOOST_PP_FOR_
-BOOST_PP_FRAME_FINISH
-BOOST_PP_FRAME_FLAGS
-BOOST_PP_FRAME_ITERATION
-BOOST_PP_FRAME_START
-
-BOOST_PP_GREATER
-BOOST_PP_GREATER_D
-BOOST_PP_GREATER_EQUAL
-BOOST_PP_GREATER_EQUAL_D
-
-BOOST_PP_IDENTITY
-BOOST_PP_IF
-BOOST_PP_IIF
-BOOST_PP_INC
-BOOST_PP_INCLUDE_SELF
-BOOST_PP_INDIRECT_SELF
-BOOST_PP_INTERCEPT
-BOOST_PP_IS_ITERATING
-BOOST_PP_IS_SELFISH
-BOOST_PP_ITERATE
-BOOST_PP_ITERATION
-BOOST_PP_ITERATION_DEPTH
-BOOST_PP_ITERATION_FINISH
-BOOST_PP_ITERATION_FLAGS
-BOOST_PP_ITERATION_LIMITS
-BOOST_PP_ITERATION_PARAMS_x
-BOOST_PP_ITERATION_START
-
-BOOST_PP_LESS
-BOOST_PP_LESS_D
-BOOST_PP_LESS_EQUAL
-BOOST_PP_LESS_EQUAL_D
-BOOST_PP_LIMIT_DIM
-BOOST_PP_LIMIT_FOR
-BOOST_PP_LIMIT_ITERATION
-BOOST_PP_LIMIT_ITERATION_DIM
-BOOST_PP_LIMIT_MAG
-BOOST_PP_LIMIT_REPEAT
-BOOST_PP_LIMIT_SLOT_COUNT
-BOOST_PP_LIMIT_SLOT_SIG
-BOOST_PP_LIMIT_TUPLE
-BOOST_PP_LIMIT_WHILE
-BOOST_PP_LINE
-BOOST_PP_LIST_APPEND
-BOOST_PP_LIST_APPEND_D
-BOOST_PP_LIST_AT
-BOOST_PP_LIST_AT_D
-BOOST_PP_LIST_CAT
-BOOST_PP_LIST_CAT_D
-BOOST_PP_LIST_CONS
-BOOST_PP_LIST_ENUM
-BOOST_PP_LIST_ENUM_R
-BOOST_PP_LIST_FILTER
-BOOST_PP_LIST_FILTER_D
-BOOST_PP_LIST_FIRST
-BOOST_PP_LIST_FIRST_N
-BOOST_PP_LIST_FIRST_N_D
-BOOST_PP_LIST_FOLD_LEFT
-BOOST_PP_LIST_FOLD_LEFT_2ND
-BOOST_PP_LIST_FOLD_LEFT_2ND_D
-BOOST_PP_LIST_FOLD_LEFT_
-BOOST_PP_LIST_FOLD_LEFT_D
-BOOST_PP_LIST_FOLD_RIGHT
-BOOST_PP_LIST_FOLD_RIGHT_2ND
-BOOST_PP_LIST_FOLD_RIGHT_2ND_D
-BOOST_PP_LIST_FOLD_RIGHT_
-BOOST_PP_LIST_FOLD_RIGHT_D
-BOOST_PP_LIST_FOR_EACH
-BOOST_PP_LIST_FOR_EACH_I
-BOOST_PP_LIST_FOR_EACH_I_R
-BOOST_PP_LIST_FOR_EACH_PRODUCT
-BOOST_PP_LIST_FOR_EACH_PRODUCT_R
-BOOST_PP_LIST_FOR_EACH_R
-BOOST_PP_LIST_IS_CONS
-BOOST_PP_LIST_IS_NIL
-BOOST_PP_LIST_NIL
-BOOST_PP_LIST_REST
-BOOST_PP_LIST_REST_N
-BOOST_PP_LIST_REST_N_D
-BOOST_PP_LIST_REVERSE
-BOOST_PP_LIST_REVERSE_D
-BOOST_PP_LIST_SIZE
-BOOST_PP_LIST_SIZE_D
-BOOST_PP_LIST_TO_TUPLE
-BOOST_PP_LIST_TO_TUPLE_R
-BOOST_PP_LIST_TRANSFORM
-BOOST_PP_LIST_TRANSFORM_D
-BOOST_PP_LOCAL_ITERATE
-BOOST_PP_LOCAL_LIMITS
-BOOST_PP_LOCAL_MACRO
-BOOST_PP_LPAREN
-BOOST_PP_LPAREN_IF
-
-BOOST_PP_MAX
-BOOST_PP_MAX_D
-BOOST_PP_MIN
-BOOST_PP_MIN_D
-BOOST_PP_MOD
-BOOST_PP_MOD_D
-BOOST_PP_MUL
-BOOST_PP_MUL_D
-
-BOOST_PP_NIL
-BOOST_PP_NOR
-BOOST_PP_NOT
-BOOST_PP_NOT_EQUAL
-BOOST_PP_NOT_EQUAL_D
-
-BOOST_PP_OR
-
-BOOST_PP_RELATIVE_FINISH
-BOOST_PP_RELATIVE_FLAGS
-BOOST_PP_RELATIVE_ITERATION
-BOOST_PP_RELATIVE_START
-BOOST_PP_REPEAT
-BOOST_PP_REPEAT_1ST
-BOOST_PP_REPEAT_2ND
-BOOST_PP_REPEAT_3RD
-BOOST_PP_REPEAT_FROM_TO
-BOOST_PP_REPEAT_FROM_TO_1ST
-BOOST_PP_REPEAT_FROM_TO_2ND
-BOOST_PP_REPEAT_FROM_TO_3RD
-BOOST_PP_REPEAT_FROM_TO_D
-BOOST_PP_REPEAT_FROM_TO_D_
-BOOST_PP_REPEAT_FROM_TO_
-BOOST_PP_REPEAT_
-BOOST_PP_RPAREN
-BOOST_PP_RPAREN_IF
-
-BOOST_PP_SLOT
-BOOST_PP_STRINGIZE
-BOOST_PP_SUB
-BOOST_PP_SUB_D
-
-BOOST_PP_TUPLE_EAT
-BOOST_PP_TUPLE_ELEM
-BOOST_PP_TUPLE_REM
-BOOST_PP_TUPLE_REVERSE
-BOOST_PP_TUPLE_TO_LIST
-
-BOOST_PP_VALUE
-
-BOOST_PP_WHILE
-BOOST_PP_WHILE_
-
-BOOST_PP_XOR
+BOOST_PP_ADD
+ BOOST_PP_ADD_D
+ BOOST_PP_AND
+ BOOST_PP_APPLY
+ BOOST_PP_ARRAY_DATA
+ BOOST_PP_ARRAY_ELEM
+ BOOST_PP_ARRAY_SIZE
+ BOOST_PP_ASSERT
+ BOOST_PP_ASSERT_MSG
+ BOOST_PP_ASSIGN_SLOT
+ BOOST_PP_BITAND
+ BOOST_PP_BITNOR
+ BOOST_PP_BITOR
+ BOOST_PP_BITXOR
+ BOOST_PP_BOOL
+ BOOST_PP_CAT
+ BOOST_PP_COMMA
+ BOOST_PP_COMMA_IF
+ BOOST_PP_COMPL
+ BOOST_PP_CONFIG_EXTENDED_LINE_INFO
+ BOOST_PP_DEC
+ BOOST_PP_DEDUCE_D
+ BOOST_PP_DEDUCE_R
+ BOOST_PP_DEDUCE_Z
+ BOOST_PP_DIV
+ BOOST_PP_DIV_D
+ BOOST_PP_EMPTY
+ BOOST_PP_ENUM
+ BOOST_PP_ENUM_BINARY_PARAMS
+ BOOST_PP_ENUM_BINARY_PARAMS_Z
+ BOOST_PP_ENUM_PARAMS
+ BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT
+ BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS
+ BOOST_PP_ENUM_PARAMS_Z
+ BOOST_PP_ENUM_SHIFTED
+ BOOST_PP_ENUM_SHIFTED_PARAMS
+ BOOST_PP_ENUM_SHIFTED_PARAMS_Z
+ BOOST_PP_ENUM_SHIFTED_
+ BOOST_PP_ENUM_TRAILING
+ BOOST_PP_ENUM_TRAILING_BINARY_PARAMS
+ BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z
+ BOOST_PP_ENUM_TRAILING_PARAMS
+ BOOST_PP_ENUM_TRAILING_PARAMS_Z
+ BOOST_PP_ENUM_TRAILING_
+ BOOST_PP_ENUM_
+ BOOST_PP_EQUAL
+ BOOST_PP_EQUAL_D
+ BOOST_PP_EXPAND
+ BOOST_PP_EXPR_IF
+ BOOST_PP_EXPR_IIF
+ BOOST_PP_FILENAME_x
+ BOOST_PP_FOR
+ BOOST_PP_FOR_
+ BOOST_PP_FRAME_FINISH
+ BOOST_PP_FRAME_FLAGS
+ BOOST_PP_FRAME_ITERATION
+ BOOST_PP_FRAME_START
+ BOOST_PP_GREATER
+ BOOST_PP_GREATER_D
+ BOOST_PP_GREATER_EQUAL
+ BOOST_PP_GREATER_EQUAL_D
+ BOOST_PP_IDENTITY
+ BOOST_PP_IF
+ BOOST_PP_IIF
+ BOOST_PP_INC
+ BOOST_PP_INCLUDE_SELF
+ BOOST_PP_INDIRECT_SELF
+ BOOST_PP_INTERCEPT
+ BOOST_PP_IS_ITERATING
+ BOOST_PP_IS_SELFISH
+ BOOST_PP_ITERATE
+ BOOST_PP_ITERATION
+ BOOST_PP_ITERATION_DEPTH
+ BOOST_PP_ITERATION_FINISH
+ BOOST_PP_ITERATION_FLAGS
+ BOOST_PP_ITERATION_LIMITS
+ BOOST_PP_ITERATION_PARAMS_x
+ BOOST_PP_ITERATION_START
+ BOOST_PP_LESS
+ BOOST_PP_LESS_D
+ BOOST_PP_LESS_EQUAL
+ BOOST_PP_LESS_EQUAL_D
+ BOOST_PP_LIMIT_DIM
+ BOOST_PP_LIMIT_FOR
+ BOOST_PP_LIMIT_ITERATION
+ BOOST_PP_LIMIT_ITERATION_DIM
+ BOOST_PP_LIMIT_MAG
+ BOOST_PP_LIMIT_REPEAT
+ BOOST_PP_LIMIT_SET
+ BOOST_PP_LIMIT_SLOT_COUNT
+ BOOST_PP_LIMIT_SLOT_SIG
+ BOOST_PP_LIMIT_TUPLE
+ BOOST_PP_LIMIT_WHILE
+ BOOST_PP_LINE
+ BOOST_PP_LIST_APPEND
+ BOOST_PP_LIST_APPEND_D
+ BOOST_PP_LIST_AT
+ BOOST_PP_LIST_AT_D
+ BOOST_PP_LIST_CAT
+ BOOST_PP_LIST_CAT_D
+ BOOST_PP_LIST_CONS
+ BOOST_PP_LIST_ENUM
+ BOOST_PP_LIST_ENUM_R
+ BOOST_PP_LIST_FILTER
+ BOOST_PP_LIST_FILTER_D
+ BOOST_PP_LIST_FIRST
+ BOOST_PP_LIST_FIRST_N
+ BOOST_PP_LIST_FIRST_N_D
+ BOOST_PP_LIST_FOLD_LEFT
+ BOOST_PP_LIST_FOLD_LEFT_2ND
+ BOOST_PP_LIST_FOLD_LEFT_2ND_D
+ BOOST_PP_LIST_FOLD_LEFT_
+ BOOST_PP_LIST_FOLD_LEFT_D
+ BOOST_PP_LIST_FOLD_RIGHT
+ BOOST_PP_LIST_FOLD_RIGHT_2ND
+ BOOST_PP_LIST_FOLD_RIGHT_2ND_D
+ BOOST_PP_LIST_FOLD_RIGHT_
+ BOOST_PP_LIST_FOLD_RIGHT_D
+ BOOST_PP_LIST_FOR_EACH
+ BOOST_PP_LIST_FOR_EACH_I
+ BOOST_PP_LIST_FOR_EACH_I_R
+ BOOST_PP_LIST_FOR_EACH_PRODUCT
+ BOOST_PP_LIST_FOR_EACH_PRODUCT_R
+ BOOST_PP_LIST_FOR_EACH_R
+ BOOST_PP_LIST_IS_CONS
+ BOOST_PP_LIST_IS_NIL
+ BOOST_PP_LIST_NIL
+ BOOST_PP_LIST_REST
+ BOOST_PP_LIST_REST_N
+ BOOST_PP_LIST_REST_N_D
+ BOOST_PP_LIST_REVERSE
+ BOOST_PP_LIST_REVERSE_D
+ BOOST_PP_LIST_SIZE
+ BOOST_PP_LIST_SIZE_D
+ BOOST_PP_LIST_TO_TUPLE
+ BOOST_PP_LIST_TO_TUPLE_R
+ BOOST_PP_LIST_TRANSFORM
+ BOOST_PP_LIST_TRANSFORM_D
+ BOOST_PP_LOCAL_ITERATE
+ BOOST_PP_LOCAL_LIMITS
+ BOOST_PP_LOCAL_MACRO
+ BOOST_PP_LPAREN
+ BOOST_PP_LPAREN_IF
+ BOOST_PP_MAX
+ BOOST_PP_MAX_D
+ BOOST_PP_MIN
+ BOOST_PP_MIN_D
+ BOOST_PP_MOD
+ BOOST_PP_MOD_D
+ BOOST_PP_MUL
+ BOOST_PP_MUL_D
+ BOOST_PP_NIL
+ BOOST_PP_NOR
+ BOOST_PP_NOT
+ BOOST_PP_NOT_EQUAL
+ BOOST_PP_NOT_EQUAL_D
+ BOOST_PP_OR
+ BOOST_PP_RELATIVE_FINISH
+ BOOST_PP_RELATIVE_FLAGS
+ BOOST_PP_RELATIVE_ITERATION
+ BOOST_PP_RELATIVE_START
+ BOOST_PP_REPEAT
+ BOOST_PP_REPEAT_1ST
+ BOOST_PP_REPEAT_2ND
+ BOOST_PP_REPEAT_3RD
+ BOOST_PP_REPEAT_FROM_TO
+ BOOST_PP_REPEAT_FROM_TO_1ST
+ BOOST_PP_REPEAT_FROM_TO_2ND
+ BOOST_PP_REPEAT_FROM_TO_3RD
+ BOOST_PP_REPEAT_FROM_TO_D
+ BOOST_PP_REPEAT_FROM_TO_D_
+ BOOST_PP_REPEAT_FROM_TO_
+ BOOST_PP_REPEAT_
+ BOOST_PP_RPAREN
+ BOOST_PP_RPAREN_IF
+ BOOST_PP_SET_CAT
+ BOOST_PP_SET_CAT_S
+ BOOST_PP_SET_ELEM
+ BOOST_PP_SET_ENUM
+ BOOST_PP_SET_FILTER
+ BOOST_PP_SET_FILTER_S
+ BOOST_PP_SET_FIRST_N
+ BOOST_PP_SET_FOLD_LEFT
+ BOOST_PP_SET_FOLD_LEFT_
+ BOOST_PP_SET_FOLD_RIGHT
+ BOOST_PP_SET_FOLD_RIGHT_
+ BOOST_PP_SET_FOR_EACH
+ BOOST_PP_SET_FOR_EACH_R
+ BOOST_PP_SET_FOR_EACH_I
+ BOOST_PP_SET_FOR_EACH_I_R
+ BOOST_PP_SET_FOR_EACH_PRODUCT
+ BOOST_PP_SET_FOR_EACH_PRODUCT_R
+ BOOST_PP_SET_HEAD
+ BOOST_PP_SET_INSERT
+ BOOST_PP_SET_NIL
+ BOOST_PP_SET_POP_BACK
+ BOOST_PP_SET_POP_FRONT
+ BOOST_PP_SET_PUSH_BACK
+ BOOST_PP_SET_PUSH_FRONT
+ BOOST_PP_SET_REMOVE
+ BOOST_PP_SET_REPLACE
+ BOOST_PP_SET_REST_N
+ BOOST_PP_SET_REVERSE
+ BOOST_PP_SET_REVERSE_S
+ BOOST_PP_SET_SIZE
+ BOOST_PP_SET_SUBSET
+ BOOST_PP_SET_TAIL
+ BOOST_PP_SET_TO_ARRAY
+ BOOST_PP_SET_TO_TUPLE
+ BOOST_PP_SET_TRANSFORM
+ BOOST_PP_SET_TRANSFORM_S
+ BOOST_PP_SLOT
+ BOOST_PP_STRINGIZE
+ BOOST_PP_SUB
+ BOOST_PP_SUB_D
+ BOOST_PP_TUPLE_EAT
+ BOOST_PP_TUPLE_ELEM
+ BOOST_PP_TUPLE_REM
+ BOOST_PP_TUPLE_REM_CTOR
+ BOOST_PP_TUPLE_REVERSE
+ BOOST_PP_TUPLE_TO_LIST
+ BOOST_PP_TUPLE_TO_SET
+ BOOST_PP_VALUE
+ BOOST_PP_WHILE
+ BOOST_PP_WHILE_
+ BOOST_PP_XOR
diff --git a/doc/data/arrays.html b/doc/data/arrays.html
index 6274eb2..393d5c8 100644
--- a/doc/data/arrays.html
+++ b/doc/data/arrays.html
@@ -2,7 +2,6 @@