diff --git a/doc/reference/comma.htm b/doc/reference/comma.htm index 71f75e2..305d98d 100644 --- a/doc/reference/comma.htm +++ b/doc/reference/comma.htm @@ -33,7 +33,7 @@ for separating macro parameters.
For example,
- BOOST_PP_IF(1,BOOST_PP_COMMA,BOOST_PP_EMPTY)() +BOOST_PP_IF(1,BOOST_PP_COMMA,BOOST_PP_EMPTY)()
expands to a comma.
diff --git a/doc/reference/empty.htm b/doc/reference/empty.htm index e879d53..fc14256 100644 --- a/doc/reference/empty.htm +++ b/doc/reference/empty.htm @@ -30,7 +30,7 @@For example,
- BOOST_PP_IF(0,BOOST_PP_COMMA,BOOST_PP_EMPTY)() +BOOST_PP_IF(0,BOOST_PP_COMMA,BOOST_PP_EMPTY)()
expands to nothing.
diff --git a/doc/reference/enum.htm b/doc/reference/enum.htm index 4433bda..acdb823 100644 --- a/doc/reference/enum.htm +++ b/doc/reference/enum.htm @@ -30,21 +30,21 @@In other words, expands to the sequence:
- MACRO(0,DATA), MACRO(1,DATA), ..., MACRO(BOOST_PP_DEC(COUNT),DATA) +MACRO(0,DATA), MACRO(1,DATA), ..., MACRO(BOOST_PP_DEC(COUNT),DATA)
For example,
- #define TYPED_PARAM(INDEX,DATA)\ - BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,DATA),INDEX) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,1,DATA),INDEX) - BOOST_PP_ENUM(3,TYPED_PARAM,(X,x)) +#define TYPED_PARAM(INDEX,DATA)\ + BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,DATA),INDEX) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,1,DATA),INDEX) +BOOST_PP_ENUM(3,TYPED_PARAM,(X,x))
expands to:
- X0 x0, X1 x1, X2 x2 +X0 x0, X1 x1, X2 x2
In other words, expands to the sequence:
- BOOST_PP_CAT(PARAM,0), BOOST_PP_CAT(PARAM,1), ..., BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) +BOOST_PP_CAT(PARAM,0), BOOST_PP_CAT(PARAM,1), ..., BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT))
For example,
- BOOST_PP_ENUM_PARAMS(3,x) +BOOST_PP_ENUM_PARAMS(3,x)
expands to:
- x0, x1, x2 +x0, x1, x2
In other words, expands to the sequence:
- BOOST_PP_CAT(PARAM,0) = DEFAULT, - BOOST_PP_CAT(PARAM,1) = DEFAULT, - ..., - BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) = DEFAULT +BOOST_PP_CAT(PARAM,0) = DEFAULT, +BOOST_PP_CAT(PARAM,1) = DEFAULT, +..., +BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) = DEFAULT
For example,
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(3,x,y) +BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(3,x,y)
expands to:
- x0 = y, x1 = y, x2 = y +x0 = y, x1 = y, x2 = y
In other words, expands to the sequence:
- BOOST_PP_CAT(PARAM,0) = BOOST_PP_CAT(DEFAULT,0), - BOOST_PP_CAT(PARAM,1) = BOOST_PP_CAT(DEFAULT,1), - ..., - BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) = BOOST_PP_CAT(DEFAULT,BOOST_PP_DEC(COUNT)) +BOOST_PP_CAT(PARAM,0) = BOOST_PP_CAT(DEFAULT,0), +BOOST_PP_CAT(PARAM,1) = BOOST_PP_CAT(DEFAULT,1), +..., +BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) = BOOST_PP_CAT(DEFAULT,BOOST_PP_DEC(COUNT))
For example,
- BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS(3,x,y) +BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS(3,x,y)
expands to:
- x0 = y0, x1 = y1, x2 = y2 +x0 = y0, x1 = y1, x2 = y2
In other words, expands to the sequence:
- MACRO(1,DATA), MACRO(2,DATA), ..., MACRO(BOOST_PP_DEC(COUNT),DATA) +MACRO(1,DATA), MACRO(2,DATA), ..., MACRO(BOOST_PP_DEC(COUNT),DATA)
For example,
- #define TYPED_PARAM(INDEX,DATA)\ - BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,DATA),INDEX) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,1,DATA),INDEX) - BOOST_PP_ENUM_SHIFTED(3,TYPED_PARAM,(X,x)) +#define TYPED_PARAM(INDEX,DATA)\ + BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,DATA),INDEX) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,1,DATA),INDEX) +BOOST_PP_ENUM_SHIFTED(3,TYPED_PARAM,(X,x))
expands to:
- X1 x1, X2 x2 +X1 x1, X2 x2
In other words, expands to the sequence:
- BOOST_PP_CAT(PARAM,1), BOOST_PP_CAT(PARAM,2), ..., BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) +BOOST_PP_CAT(PARAM,1), BOOST_PP_CAT(PARAM,2), ..., BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT))
For example,
- BOOST_PP_ENUM_SHIFTED_PARAMS(3,x) +BOOST_PP_ENUM_SHIFTED_PARAMS(3,x)
expands to:
- x1, x2 +x1, x2
In other words, expands to the sequence:
- MACRO(R,STATE) - MACRO(R,OP(R,STATE)) - MACRO(R,OP(R,OP(R,STATE))) - ... - MACRO(R,OP(R,OP(...OP(R,STATE)...))) +MACRO(R,STATE) +MACRO(R,OP(R,STATE)) +MACRO(R,OP(R,OP(R,STATE))) +... +MACRO(R,OP(R,OP(...OP(R,STATE)...)))
The length of the sequence is determined by PRED(R,STATE)
.
For example,
- #define PRED(R,STATE) BOOST_PP_LESS(BOOST_PP_TUPLE_ELEM(2,0,STATE),BOOST_PP_TUPLE_ELEM(2,1,STATE)) - #define OP(R,STATE) (BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2,0,STATE)),BOOST_PP_TUPLE_ELEM(2,1,STATE)) - #define MACRO(R,STATE) BOOST_PP_TUPLE_ELEM(2,0,STATE) - BOOST_PP_FOR((0,3),PRED,OP,MACRO) +#define PRED(R,STATE) BOOST_PP_LESS(BOOST_PP_TUPLE_ELEM(2,0,STATE),BOOST_PP_TUPLE_ELEM(2,1,STATE)) +#define OP(R,STATE) (BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2,0,STATE)),BOOST_PP_TUPLE_ELEM(2,1,STATE)) +#define MACRO(R,STATE) BOOST_PP_TUPLE_ELEM(2,0,STATE) +BOOST_PP_FOR((0,3),PRED,OP,MACRO)
expands to:
- 0 1 2 +0 1 2
For example,
- BOOST_PP_IF(1,BOOST_PP_IDENTITY(X),BOOST_PP_EMPTY)() +BOOST_PP_IF(1,BOOST_PP_IDENTITY(X),BOOST_PP_EMPTY)()
expands to:
- X +X
- BOOST_PP_LIST_CONS(1, - BOOST_PP_LIST_CONS(2, - BOOST_PP_LIST_CONS(3, - BOOST_PP_LIST_CONS(4, - BOOST_PP_LIST_CONS(5, - BOOST_PP_LIST_NIL))))) +BOOST_PP_LIST_CONS(1, +BOOST_PP_LIST_CONS(2, +BOOST_PP_LIST_CONS(3, +BOOST_PP_LIST_CONS(4, +BOOST_PP_LIST_CONS(5, +BOOST_PP_LIST_NIL)))))
Short lists can also be build from tuples:
- BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5)) +BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5))
Both of the above lists contain 5 elements: 1, 2, 3, 4 and 5.
@@ -61,16 +61,16 @@ and BOOST_PP_LIST_FOLD_RIGHT_2ND():- BOOST_PP_LIST_FOLD_RIGHT_2ND - ( BOOST_PP_LIST_APPEND_D - , BOOST_PP_TUPLE_TO_LIST - ( N - , BOOST_PP_TUPLE_TO_LIST(M, (E11, E12, ..., E1M) ) - , BOOST_PP_TUPLE_TO_LIST(M, (E21, E22, ..., E2M) ) - , ... - , BOOST_PP_TUPLE_TO_LIST(M, (EN1, EN2, ..., ENM) ) - ) +BOOST_PP_LIST_FOLD_RIGHT_2ND +( BOOST_PP_LIST_APPEND_D +, BOOST_PP_TUPLE_TO_LIST + ( N + , BOOST_PP_TUPLE_TO_LIST(M, (E11, E12, ..., E1M) ) + , BOOST_PP_TUPLE_TO_LIST(M, (E21, E22, ..., E2M) ) + , ... + , BOOST_PP_TUPLE_TO_LIST(M, (EN1, EN2, ..., ENM) ) ) +)
For example,
- BOOST_PP_LIST_FIRST(BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5))) +BOOST_PP_LIST_FIRST(BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5)))
expands to 1.
@@ -108,13 +108,13 @@ and BOOST_PP_LISTFor example,
- BOOST_PP_LIST_REST(BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5))) +BOOST_PP_LIST_REST(BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(4,(2,3,4,5)) +BOOST_PP_TUPLE_TO_LIST(4,(2,3,4,5))
For example,
- BOOST_PP_LIST_APPEND - ( BOOST_PP_TUPLE_TO_LIST(2,(1,2)) - , BOOST_PP_TUPLE_TO_LIST(2,(3,4)) - ) +BOOST_PP_LIST_APPEND +( BOOST_PP_TUPLE_TO_LIST(2,(1,2)) +, BOOST_PP_TUPLE_TO_LIST(2,(3,4)) +)
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(4,(1,2,3,4)) +BOOST_PP_TUPLE_TO_LIST(4,(1,2,3,4))
0
.
For example,
- BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)),1) +BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)),1)
expands to B
.
For example,
- BOOST_PP_LIST_CAT(BOOST_PP_TUPLE_TO_LIST(3,(1,2,3))) +BOOST_PP_LIST_CAT(BOOST_PP_TUPLE_TO_LIST(3,(1,2,3)))
expands to:
- 123 +123
For example,
- BOOST_PP_LIST_ENUM(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +BOOST_PP_LIST_ENUM(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to:
- A,B,C +A,B,C
PRED(D,DATA,X)
is true.
For example,
- BOOST_PP_LIST_FILTER(BOOST_PP_NOT_EQUAL_D,2,BOOST_PP_TUPLE_TO_LIST(3,(1,2,3))) +BOOST_PP_LIST_FILTER(BOOST_PP_NOT_EQUAL_D,2,BOOST_PP_TUPLE_TO_LIST(3,(1,2,3)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(2,(1,3)) +BOOST_PP_TUPLE_TO_LIST(2,(1,3))
For example,
- BOOST_PP_LIST_FIRST_N(2,BOOST_PP_TUPLE_TO_LIST(4,(+,-,*,/))) +BOOST_PP_LIST_FIRST_N(2,BOOST_PP_TUPLE_TO_LIST(4,(+,-,*,/)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(2,(+,-)) +BOOST_PP_TUPLE_TO_LIST(2,(+,-))
LIST
(from the left or the start of the list).
In other words, expands to:
- OP - ( D - , ... OP(D, OP(D,STATE,BOOST_PP_LIST_AT(LIST,0)), BOOST_PP_LIST_AT(LIST,1)) ... - , BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)) - ) +OP +( D +, ... OP(D, OP(D,STATE,BOOST_PP_LIST_AT(LIST,0)), BOOST_PP_LIST_AT(LIST,1)) ... +, BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)) +)
For example,
- #define TEST(D,STATE,X) BOOST_PP_CAT(STATE,X) - BOOST_PP_LIST_FOLD_LEFT(TEST,_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +#define TEST(D,STATE,X) BOOST_PP_CAT(STATE,X) +BOOST_PP_LIST_FOLD_LEFT(TEST,_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to:
- _ABC +_ABC
LIST
(from the right or the end of the list).
In other words, expands to:
- OP - ( D - , BOOST_PP_LIST_AT(LIST,0) - , ... OP +OP +( D +, BOOST_PP_LIST_AT(LIST,0) +, ... OP + ( D + , BOOST_PP_LIST_AT(LIST,BOOST_PP_SUB(BOOST_PP_LIST_SIZE(LIST),2)) + , OP ( D - , BOOST_PP_LIST_AT(LIST,BOOST_PP_SUB(BOOST_PP_LIST_SIZE(LIST),2)) - , OP - ( D - , BOOST_PP_LIST_AT(LIST,BOOST_PP_SUB(BOOST_PP_LIST_SIZE(LIST),1)) - , STATE - ) - ) ... - ) + , BOOST_PP_LIST_AT(LIST,BOOST_PP_SUB(BOOST_PP_LIST_SIZE(LIST),1)) + , STATE + ) + ) ... +)
For example,
- #define TEST(D,X,STATE) BOOST_PP_CAT(STATE,X) - BOOST_PP_LIST_FOLD_RIGHT(TEST,_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +#define TEST(D,X,STATE) BOOST_PP_CAT(STATE,X) +BOOST_PP_LIST_FOLD_RIGHT(TEST,_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to:
- _CBA +_CBA
In other words, expands to the sequence:
- MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,0)) - MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,1)) - ... - MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)))) +MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,0)) +MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,1)) +... +MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST))))
For example,
- #define TEST(R,DATA,X) BOOST_PP_CAT(DATA,X)(); - BOOST_PP_LIST_FOR_EACH(TEST,prefix_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +#define TEST(R,DATA,X) BOOST_PP_CAT(DATA,X)(); +BOOST_PP_LIST_FOR_EACH(TEST,prefix_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to:
- prefix_A(); prefix_B(); prefix_C(); +prefix_A(); prefix_B(); prefix_C();
In other words, expands to the sequence:
- MACRO(R,DATA,0,BOOST_PP_LIST_AT(LIST,0)) - MACRO(R,DATA,1,BOOST_PP_LIST_AT(LIST,1)) - ... - MACRO(R,DATA,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)),BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)))) +MACRO(R,DATA,0,BOOST_PP_LIST_AT(LIST,0)) +MACRO(R,DATA,1,BOOST_PP_LIST_AT(LIST,1)) +... +MACRO(R,DATA,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)),BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST))))
For example,
- #define TEST(R,DATA,INDEX,X) BOOST_PP_CAT(DATA,X)(INDEX); - BOOST_PP_LIST_FOR_EACH_I(TEST,prefix_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +#define TEST(R,DATA,INDEX,X) BOOST_PP_CAT(DATA,X)(INDEX); +BOOST_PP_LIST_FOR_EACH_I(TEST,prefix_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to:
- prefix_A(0); prefix_B(1); prefix_C(2); +prefix_A(0); prefix_B(1); prefix_C(2);
For example,
- #define TEST(R,X) X - BOOST_PP_LIST_FOR_EACH_PRODUCT - ( TEST - , 2 - , ( BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)) - , BOOST_PP_TUPLE_TO_LIST(2,(1,2)) - ) +#define TEST(R,X) X +BOOST_PP_LIST_FOR_EACH_PRODUCT +( TEST +, 2 +, ( BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)) + , BOOST_PP_TUPLE_TO_LIST(2,(1,2)) ) +)
expands to:
- (A,1) (A,2) (B,1) (B,2) (C,1) (C,2) +(A,1) (A,2) (B,1) (B,2) (C,1) (C,2)
LIST
.
For example,
- BOOST_PP_LIST_REST_N(2,BOOST_PP_TUPLE_TO_LIST(4,(+,-,*,/))) +BOOST_PP_LIST_REST_N(2,BOOST_PP_TUPLE_TO_LIST(4,(+,-,*,/)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(2,(*,/)) +BOOST_PP_TUPLE_TO_LIST(2,(*,/))
For example,
- BOOST_PP_LIST_REVERSE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +BOOST_PP_LIST_REVERSE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(3,(C,B,A)) +BOOST_PP_TUPLE_TO_LIST(3,(C,B,A))
For example,
- BOOST_PP_LIST_SIZE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +BOOST_PP_LIST_SIZE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to 3
.
For example,
- BOOST_PP_LIST_TO_TUPLE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +BOOST_PP_LIST_TO_TUPLE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to (A,B,C)
.
In other words, expands to:
- BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,0)), - BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,1)), - ... - BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)))), - BOOST_PP_LIST_NIL) ... )) +BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,0)), +BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,1)), +... +BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)))), +BOOST_PP_LIST_NIL) ... ))
For example,
- BOOST_PP_LIST_TRANSFORM(BOOST_PP_ADD_D,2,BOOST_PP_TUPLE_TO_LIST(2,(1,2))) +BOOST_PP_LIST_TRANSFORM(BOOST_PP_ADD_D,2,BOOST_PP_TUPLE_TO_LIST(2,(1,2)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(2,(3,4)) +BOOST_PP_TUPLE_TO_LIST(2,(3,4))
In other words, expands to the sequence:
- MACRO(0,DATA) MACRO(1,DATA) ... MACRO(BOOST_PP_DEC(COUNT),DATA) +MACRO(0,DATA) MACRO(1,DATA) ... MACRO(BOOST_PP_DEC(COUNT),DATA)
For example,
- #define TEST(INDEX,DATA) DATA(INDEX); - BOOST_PP_REPEAT(3,TEST,X) +#define TEST(INDEX,DATA) DATA(INDEX); +BOOST_PP_REPEAT(3,TEST,X)
expands to:
- X(0); X(1); X(2); +X(0); X(1); X(2);
In other words, expands to the sequence:
- MACRO(FIRST,DATA) MACRO(BOOST_PP_INC(FIRST),DATA) ... MACRO(BOOST_PP_DEC(LAST),DATA) +MACRO(FIRST,DATA) MACRO(BOOST_PP_INC(FIRST),DATA) ... MACRO(BOOST_PP_DEC(LAST),DATA)
For example,
- #define TEST(INDEX,DATA) DATA(INDEX); - BOOST_PP_REPEAT_FROM_TO(4,7,TEST,X) +#define TEST(INDEX,DATA) DATA(INDEX); +BOOST_PP_REPEAT_FROM_TO(4,7,TEST,X)
expands to:
- X(4); X(5); X(6); +X(4); X(5); X(6);
Examples of tuples:
- (const, volatile) // 2-tuple - (*, /, %) // 3-tuple - (1, "2", '3', (4,5)) // 4-tuple +(const, volatile) // 2-tuple +(*, /, %) // 3-tuple +(1, "2", '3', (4,5)) // 4-tuple
Tuples can be used for representing structured data.
diff --git a/doc/reference/tuple_eat.htm b/doc/reference/tuple_eat.htm index af8863f..4861c02 100644 --- a/doc/reference/tuple_eat.htm +++ b/doc/reference/tuple_eat.htm @@ -33,7 +33,7 @@For example,
- BOOST_PP_IF(0,BOOST_PP_ENUM_PARAMS,BOOST_PP_TUPLE_EAT(2))(10,P) +BOOST_PP_IF(0,BOOST_PP_ENUM_PARAMS,BOOST_PP_TUPLE_EAT(2))(10,P)
expands to nothing.
diff --git a/doc/reference/tuple_elem.htm b/doc/reference/tuple_elem.htm index cad8f66..e3996f9 100644 --- a/doc/reference/tuple_elem.htm +++ b/doc/reference/tuple_elem.htm @@ -30,7 +30,7 @@For example,
- BOOST_PP_TUPLE_ELEM(2,1,(A,B)) +BOOST_PP_TUPLE_ELEM(2,1,(A,B))
expands to B
.
For example,
- BOOST_PP_TUPLE_REVERSE(3,(A,B,C)) +BOOST_PP_TUPLE_REVERSE(3,(A,B,C))
expands to (C,B,A)
.
For example,
- BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)) +BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))
expands to the same as
- BOOST_PP_LIST_CONS(A, - BOOST_PP_LIST_CONS(B, - BOOST_PP_LIST_CONS(C, - BOOST_PP_LIST_NIL))) +BOOST_PP_LIST_CONS(A, +BOOST_PP_LIST_CONS(B, +BOOST_PP_LIST_CONS(C, +BOOST_PP_LIST_NIL)))
In other words, expands to:
- OP(D, ... OP(D, OP(D,STATE) ) ... ) +OP(D, ... OP(D, OP(D,STATE) ) ... )
The depth of iteration is determined by PRED(D,STATE)
.
For example,
- #define PRED(D,STATE) BOOST_PP_LESS_D(D,BOOST_PP_TUPLE_ELEM(2,0,STATE),BOOST_PP_TUPLE_ELEM(2,1,STATE)) - #define OP(D,STATE) (BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2,0,STATE)),BOOST_PP_TUPLE_ELEM(2,1,STATE)) - BOOST_PP_WHILE(PRED,OP,(0,3)) +#define PRED(D,STATE) BOOST_PP_LESS_D(D,BOOST_PP_TUPLE_ELEM(2,0,STATE),BOOST_PP_TUPLE_ELEM(2,1,STATE)) +#define OP(D,STATE) (BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2,0,STATE)),BOOST_PP_TUPLE_ELEM(2,1,STATE)) +BOOST_PP_WHILE(PRED,OP,(0,3))
expands to:
- (3,3) +(3,3)
For example,
- BOOST_PP_IF(1,BOOST_PP_COMMA,BOOST_PP_EMPTY)() +BOOST_PP_IF(1,BOOST_PP_COMMA,BOOST_PP_EMPTY)()
expands to a comma.
diff --git a/include/boost/preprocessor/empty.hpp b/include/boost/preprocessor/empty.hpp index 13907a9..250450c 100644 --- a/include/boost/preprocessor/empty.hpp +++ b/include/boost/preprocessor/empty.hpp @@ -18,7 +18,7 @@For example,
- BOOST_PP_IF(0,BOOST_PP_COMMA,BOOST_PP_EMPTY)() +BOOST_PP_IF(0,BOOST_PP_COMMA,BOOST_PP_EMPTY)()
expands to nothing.
diff --git a/include/boost/preprocessor/enum.hpp b/include/boost/preprocessor/enum.hpp index 3edab0c..c11222c 100644 --- a/include/boost/preprocessor/enum.hpp +++ b/include/boost/preprocessor/enum.hpp @@ -22,21 +22,21 @@In other words, expands to the sequence:
- MACRO(0,DATA), MACRO(1,DATA), ..., MACRO(BOOST_PP_DEC(COUNT),DATA) +MACRO(0,DATA), MACRO(1,DATA), ..., MACRO(BOOST_PP_DEC(COUNT),DATA)
For example,
- #define TYPED_PARAM(INDEX,DATA)\ - BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,DATA),INDEX) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,1,DATA),INDEX) - BOOST_PP_ENUM(3,TYPED_PARAM,(X,x)) +#define TYPED_PARAM(INDEX,DATA)\ + BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,DATA),INDEX) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,1,DATA),INDEX) +BOOST_PP_ENUM(3,TYPED_PARAM,(X,x))
expands to:
- X0 x0, X1 x1, X2 x2 +X0 x0, X1 x1, X2 x2
In other words, expands to the sequence:
- BOOST_PP_CAT(PARAM,0), BOOST_PP_CAT(PARAM,1), ..., BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) +BOOST_PP_CAT(PARAM,0), BOOST_PP_CAT(PARAM,1), ..., BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT))
For example,
- BOOST_PP_ENUM_PARAMS(3,x) +BOOST_PP_ENUM_PARAMS(3,x)
expands to:
- x0, x1, x2 +x0, x1, x2
In other words, expands to the sequence:
- BOOST_PP_CAT(PARAM,0) = DEFAULT, - BOOST_PP_CAT(PARAM,1) = DEFAULT, - ..., - BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) = DEFAULT +BOOST_PP_CAT(PARAM,0) = DEFAULT, +BOOST_PP_CAT(PARAM,1) = DEFAULT, +..., +BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) = DEFAULT
For example,
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(3,x,y) +BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(3,x,y)
expands to:
- x0 = y, x1 = y, x2 = y +x0 = y, x1 = y, x2 = y
In other words, expands to the sequence:
- BOOST_PP_CAT(PARAM,0) = BOOST_PP_CAT(DEFAULT,0), - BOOST_PP_CAT(PARAM,1) = BOOST_PP_CAT(DEFAULT,1), - ..., - BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) = BOOST_PP_CAT(DEFAULT,BOOST_PP_DEC(COUNT)) +BOOST_PP_CAT(PARAM,0) = BOOST_PP_CAT(DEFAULT,0), +BOOST_PP_CAT(PARAM,1) = BOOST_PP_CAT(DEFAULT,1), +..., +BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) = BOOST_PP_CAT(DEFAULT,BOOST_PP_DEC(COUNT))
For example,
- BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS(3,x,y) +BOOST_PP_ENUM_PARAMS_WITH_DEFAULTS(3,x,y)
expands to:
- x0 = y0, x1 = y1, x2 = y2 +x0 = y0, x1 = y1, x2 = y2
In other words, expands to the sequence:
- MACRO(1,DATA), MACRO(2,DATA), ..., MACRO(BOOST_PP_DEC(COUNT),DATA) +MACRO(1,DATA), MACRO(2,DATA), ..., MACRO(BOOST_PP_DEC(COUNT),DATA)
For example,
- #define TYPED_PARAM(INDEX,DATA)\ - BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,DATA),INDEX) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,1,DATA),INDEX) - BOOST_PP_ENUM_SHIFTED(3,TYPED_PARAM,(X,x)) +#define TYPED_PARAM(INDEX,DATA)\ + BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,0,DATA),INDEX) BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2,1,DATA),INDEX) +BOOST_PP_ENUM_SHIFTED(3,TYPED_PARAM,(X,x))
expands to:
- X1 x1, X2 x2 +X1 x1, X2 x2
In other words, expands to the sequence:
- BOOST_PP_CAT(PARAM,1), BOOST_PP_CAT(PARAM,2), ..., BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT)) +BOOST_PP_CAT(PARAM,1), BOOST_PP_CAT(PARAM,2), ..., BOOST_PP_CAT(PARAM,BOOST_PP_DEC(COUNT))
For example,
- BOOST_PP_ENUM_SHIFTED_PARAMS(3,x) +BOOST_PP_ENUM_SHIFTED_PARAMS(3,x)
expands to:
- x1, x2 +x1, x2
In other words, expands to the sequence:
- MACRO(R,STATE) - MACRO(R,OP(R,STATE)) - MACRO(R,OP(R,OP(R,STATE))) - ... - MACRO(R,OP(R,OP(...OP(R,STATE)...))) +MACRO(R,STATE) +MACRO(R,OP(R,STATE)) +MACRO(R,OP(R,OP(R,STATE))) +... +MACRO(R,OP(R,OP(...OP(R,STATE)...)))
The length of the sequence is determined by PRED(R,STATE)
.
For example,
- #define PRED(R,STATE) BOOST_PP_LESS(BOOST_PP_TUPLE_ELEM(2,0,STATE),BOOST_PP_TUPLE_ELEM(2,1,STATE)) - #define OP(R,STATE) (BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2,0,STATE)),BOOST_PP_TUPLE_ELEM(2,1,STATE)) - #define MACRO(R,STATE) BOOST_PP_TUPLE_ELEM(2,0,STATE) - BOOST_PP_FOR((0,3),PRED,OP,MACRO) +#define PRED(R,STATE) BOOST_PP_LESS(BOOST_PP_TUPLE_ELEM(2,0,STATE),BOOST_PP_TUPLE_ELEM(2,1,STATE)) +#define OP(R,STATE) (BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2,0,STATE)),BOOST_PP_TUPLE_ELEM(2,1,STATE)) +#define MACRO(R,STATE) BOOST_PP_TUPLE_ELEM(2,0,STATE) +BOOST_PP_FOR((0,3),PRED,OP,MACRO)
expands to:
- 0 1 2 +0 1 2
For example,
- BOOST_PP_IF(1,BOOST_PP_IDENTITY(X),BOOST_PP_EMPTY)() +BOOST_PP_IF(1,BOOST_PP_IDENTITY(X),BOOST_PP_EMPTY)()
expands to:
- X +X
- BOOST_PP_LIST_CONS(1, - BOOST_PP_LIST_CONS(2, - BOOST_PP_LIST_CONS(3, - BOOST_PP_LIST_CONS(4, - BOOST_PP_LIST_CONS(5, - BOOST_PP_LIST_NIL))))) +BOOST_PP_LIST_CONS(1, +BOOST_PP_LIST_CONS(2, +BOOST_PP_LIST_CONS(3, +BOOST_PP_LIST_CONS(4, +BOOST_PP_LIST_CONS(5, +BOOST_PP_LIST_NIL)))))
Short lists can also be build from tuples:
- BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5)) +BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5))
Both of the above lists contain 5 elements: 1, 2, 3, 4 and 5.
@@ -52,16 +52,16 @@ BOOST_PP_LIST_CONS(). For example, and BOOST_PP_LIST_FOLD_RIGHT_2ND():- BOOST_PP_LIST_FOLD_RIGHT_2ND - ( BOOST_PP_LIST_APPEND_D - , BOOST_PP_TUPLE_TO_LIST - ( N - , BOOST_PP_TUPLE_TO_LIST(M, (E11, E12, ..., E1M) ) - , BOOST_PP_TUPLE_TO_LIST(M, (E21, E22, ..., E2M) ) - , ... - , BOOST_PP_TUPLE_TO_LIST(M, (EN1, EN2, ..., ENM) ) - ) +BOOST_PP_LIST_FOLD_RIGHT_2ND +( BOOST_PP_LIST_APPEND_D +, BOOST_PP_TUPLE_TO_LIST + ( N + , BOOST_PP_TUPLE_TO_LIST(M, (E11, E12, ..., E1M) ) + , BOOST_PP_TUPLE_TO_LIST(M, (E21, E22, ..., E2M) ) + , ... + , BOOST_PP_TUPLE_TO_LIST(M, (EN1, EN2, ..., ENM) ) ) +)*/ #define BOOST_PP_LIST_CONS(FIRST,REST) (FIRST,REST,1) @@ -88,7 +88,7 @@ and BOOST_PP_LIST_FOLD_RIGHT_2ND():
For example,
- BOOST_PP_LIST_FIRST(BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5))) +BOOST_PP_LIST_FIRST(BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5)))
expands to 1.
@@ -106,13 +106,13 @@ and BOOST_PP_LIST_FOLD_RIGHT_2ND():For example,
- BOOST_PP_LIST_REST(BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5))) +BOOST_PP_LIST_REST(BOOST_PP_TUPLE_TO_LIST(5,(1,2,3,4,5)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(4,(2,3,4,5)) +BOOST_PP_TUPLE_TO_LIST(4,(2,3,4,5))*/ #if !defined(BOOST_NO_COMPILER_CONFIG) && defined(__MWERKS__) diff --git a/include/boost/preprocessor/list/append.hpp b/include/boost/preprocessor/list/append.hpp index 651c0db..8a7e14a 100644 --- a/include/boost/preprocessor/list/append.hpp +++ b/include/boost/preprocessor/list/append.hpp @@ -20,16 +20,16 @@
For example,
- BOOST_PP_LIST_APPEND - ( BOOST_PP_TUPLE_TO_LIST(2,(1,2)) - , BOOST_PP_TUPLE_TO_LIST(2,(3,4)) - ) +BOOST_PP_LIST_APPEND +( BOOST_PP_TUPLE_TO_LIST(2,(1,2)) +, BOOST_PP_TUPLE_TO_LIST(2,(3,4)) +)
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(4,(1,2,3,4)) +BOOST_PP_TUPLE_TO_LIST(4,(1,2,3,4))
0
.
For example,
- BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)),1) +BOOST_PP_LIST_AT(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)),1)
expands to B
.
For example,
- BOOST_PP_LIST_CAT(BOOST_PP_TUPLE_TO_LIST(3,(1,2,3))) +BOOST_PP_LIST_CAT(BOOST_PP_TUPLE_TO_LIST(3,(1,2,3)))
expands to:
- 123 +123
For example,
- BOOST_PP_LIST_ENUM(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +BOOST_PP_LIST_ENUM(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to:
- A,B,C +A,B,C
PRED(D,DATA,X)
is true.
For example,
- BOOST_PP_LIST_FILTER(BOOST_PP_NOT_EQUAL_D,2,BOOST_PP_TUPLE_TO_LIST(3,(1,2,3))) +BOOST_PP_LIST_FILTER(BOOST_PP_NOT_EQUAL_D,2,BOOST_PP_TUPLE_TO_LIST(3,(1,2,3)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(2,(1,3)) +BOOST_PP_TUPLE_TO_LIST(2,(1,3))
For example,
- BOOST_PP_LIST_FIRST_N(2,BOOST_PP_TUPLE_TO_LIST(4,(+,-,*,/))) +BOOST_PP_LIST_FIRST_N(2,BOOST_PP_TUPLE_TO_LIST(4,(+,-,*,/)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(2,(+,-)) +BOOST_PP_TUPLE_TO_LIST(2,(+,-))
LIST
(from the left or the start of the list).
In other words, expands to:
- OP - ( D - , ... OP(D, OP(D,STATE,BOOST_PP_LIST_AT(LIST,0)), BOOST_PP_LIST_AT(LIST,1)) ... - , BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)) - ) +OP +( D +, ... OP(D, OP(D,STATE,BOOST_PP_LIST_AT(LIST,0)), BOOST_PP_LIST_AT(LIST,1)) ... +, BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)) +)
For example,
- #define TEST(D,STATE,X) BOOST_PP_CAT(STATE,X) - BOOST_PP_LIST_FOLD_LEFT(TEST,_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +#define TEST(D,STATE,X) BOOST_PP_CAT(STATE,X) +BOOST_PP_LIST_FOLD_LEFT(TEST,_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to:
- _ABC +_ABC
LIST
(from the right or the end of the list).
In other words, expands to:
- OP - ( D - , BOOST_PP_LIST_AT(LIST,0) - , ... OP +OP +( D +, BOOST_PP_LIST_AT(LIST,0) +, ... OP + ( D + , BOOST_PP_LIST_AT(LIST,BOOST_PP_SUB(BOOST_PP_LIST_SIZE(LIST),2)) + , OP ( D - , BOOST_PP_LIST_AT(LIST,BOOST_PP_SUB(BOOST_PP_LIST_SIZE(LIST),2)) - , OP - ( D - , BOOST_PP_LIST_AT(LIST,BOOST_PP_SUB(BOOST_PP_LIST_SIZE(LIST),1)) - , STATE - ) - ) ... - ) + , BOOST_PP_LIST_AT(LIST,BOOST_PP_SUB(BOOST_PP_LIST_SIZE(LIST),1)) + , STATE + ) + ) ... +)
For example,
- #define TEST(D,X,STATE) BOOST_PP_CAT(STATE,X) - BOOST_PP_LIST_FOLD_RIGHT(TEST,_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +#define TEST(D,X,STATE) BOOST_PP_CAT(STATE,X) +BOOST_PP_LIST_FOLD_RIGHT(TEST,_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to:
- _CBA +_CBA
In other words, expands to the sequence:
- MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,0)) - MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,1)) - ... - MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)))) +MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,0)) +MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,1)) +... +MACRO(R,DATA,BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST))))
For example,
- #define TEST(R,DATA,X) BOOST_PP_CAT(DATA,X)(); - BOOST_PP_LIST_FOR_EACH(TEST,prefix_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +#define TEST(R,DATA,X) BOOST_PP_CAT(DATA,X)(); +BOOST_PP_LIST_FOR_EACH(TEST,prefix_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to:
- prefix_A(); prefix_B(); prefix_C(); +prefix_A(); prefix_B(); prefix_C();
In other words, expands to the sequence:
- MACRO(R,DATA,0,BOOST_PP_LIST_AT(LIST,0)) - MACRO(R,DATA,1,BOOST_PP_LIST_AT(LIST,1)) - ... - MACRO(R,DATA,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)),BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)))) +MACRO(R,DATA,0,BOOST_PP_LIST_AT(LIST,0)) +MACRO(R,DATA,1,BOOST_PP_LIST_AT(LIST,1)) +... +MACRO(R,DATA,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)),BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST))))
For example,
- #define TEST(R,DATA,INDEX,X) BOOST_PP_CAT(DATA,X)(INDEX); - BOOST_PP_LIST_FOR_EACH_I(TEST,prefix_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +#define TEST(R,DATA,INDEX,X) BOOST_PP_CAT(DATA,X)(INDEX); +BOOST_PP_LIST_FOR_EACH_I(TEST,prefix_,BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to:
- prefix_A(0); prefix_B(1); prefix_C(2); +prefix_A(0); prefix_B(1); prefix_C(2);
For example,
- #define TEST(R,X) X - BOOST_PP_LIST_FOR_EACH_PRODUCT - ( TEST - , 2 - , ( BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)) - , BOOST_PP_TUPLE_TO_LIST(2,(1,2)) - ) +#define TEST(R,X) X +BOOST_PP_LIST_FOR_EACH_PRODUCT +( TEST +, 2 +, ( BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)) + , BOOST_PP_TUPLE_TO_LIST(2,(1,2)) ) +)
expands to:
- (A,1) (A,2) (B,1) (B,2) (C,1) (C,2) +(A,1) (A,2) (B,1) (B,2) (C,1) (C,2)
LIST
.
For example,
- BOOST_PP_LIST_REST_N(2,BOOST_PP_TUPLE_TO_LIST(4,(+,-,*,/))) +BOOST_PP_LIST_REST_N(2,BOOST_PP_TUPLE_TO_LIST(4,(+,-,*,/)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(2,(*,/)) +BOOST_PP_TUPLE_TO_LIST(2,(*,/))
For example,
- BOOST_PP_LIST_REVERSE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +BOOST_PP_LIST_REVERSE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(3,(C,B,A)) +BOOST_PP_TUPLE_TO_LIST(3,(C,B,A))
For example,
- BOOST_PP_LIST_SIZE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +BOOST_PP_LIST_SIZE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to 3
.
For example,
- BOOST_PP_LIST_TO_TUPLE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))) +BOOST_PP_LIST_TO_TUPLE(BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)))
expands to (A,B,C)
.
In other words, expands to:
- BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,0)), - BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,1)), - ... - BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)))), - BOOST_PP_LIST_NIL) ... )) +BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,0)), +BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,1)), +... +BOOST_PP_LIST_CONS(OP(D,DATA,BOOST_PP_LIST_AT(LIST,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(LIST)))), +BOOST_PP_LIST_NIL) ... ))
For example,
- BOOST_PP_LIST_TRANSFORM(BOOST_PP_ADD_D,2,BOOST_PP_TUPLE_TO_LIST(2,(1,2))) +BOOST_PP_LIST_TRANSFORM(BOOST_PP_ADD_D,2,BOOST_PP_TUPLE_TO_LIST(2,(1,2)))
expands to the same as:
- BOOST_PP_TUPLE_TO_LIST(2,(3,4)) +BOOST_PP_TUPLE_TO_LIST(2,(3,4))
In other words, expands to the sequence:
- MACRO(0,DATA) MACRO(1,DATA) ... MACRO(BOOST_PP_DEC(COUNT),DATA) +MACRO(0,DATA) MACRO(1,DATA) ... MACRO(BOOST_PP_DEC(COUNT),DATA)
For example,
- #define TEST(INDEX,DATA) DATA(INDEX); - BOOST_PP_REPEAT(3,TEST,X) +#define TEST(INDEX,DATA) DATA(INDEX); +BOOST_PP_REPEAT(3,TEST,X)
expands to:
- X(0); X(1); X(2); +X(0); X(1); X(2);
In other words, expands to the sequence:
- MACRO(FIRST,DATA) MACRO(BOOST_PP_INC(FIRST),DATA) ... MACRO(BOOST_PP_DEC(LAST),DATA) +MACRO(FIRST,DATA) MACRO(BOOST_PP_INC(FIRST),DATA) ... MACRO(BOOST_PP_DEC(LAST),DATA)
For example,
- #define TEST(INDEX,DATA) DATA(INDEX); - BOOST_PP_REPEAT_FROM_TO(4,7,TEST,X) +#define TEST(INDEX,DATA) DATA(INDEX); +BOOST_PP_REPEAT_FROM_TO(4,7,TEST,X)
expands to:
- X(4); X(5); X(6); +X(4); X(5); X(6);
Examples of tuples:
- (const, volatile) // 2-tuple - (*, /, %) // 3-tuple - (1, "2", '3', (4,5)) // 4-tuple +(const, volatile) // 2-tuple +(*, /, %) // 3-tuple +(1, "2", '3', (4,5)) // 4-tuple
Tuples can be used for representing structured data.
diff --git a/include/boost/preprocessor/tuple/eat.hpp b/include/boost/preprocessor/tuple/eat.hpp index ea56346..d79bfe4 100644 --- a/include/boost/preprocessor/tuple/eat.hpp +++ b/include/boost/preprocessor/tuple/eat.hpp @@ -21,7 +21,7 @@ BOOST_PP_EMPTY().For example,
- BOOST_PP_IF(0,BOOST_PP_ENUM_PARAMS,BOOST_PP_TUPLE_EAT(2))(10,P) +BOOST_PP_IF(0,BOOST_PP_ENUM_PARAMS,BOOST_PP_TUPLE_EAT(2))(10,P)
expands to nothing.
diff --git a/include/boost/preprocessor/tuple/elem.hpp b/include/boost/preprocessor/tuple/elem.hpp index 9f13d50..f2daac1 100644 --- a/include/boost/preprocessor/tuple/elem.hpp +++ b/include/boost/preprocessor/tuple/elem.hpp @@ -18,7 +18,7 @@For example,
- BOOST_PP_TUPLE_ELEM(2,1,(A,B)) +BOOST_PP_TUPLE_ELEM(2,1,(A,B))
expands to B
.
For example,
- BOOST_PP_TUPLE_REVERSE(3,(A,B,C)) +BOOST_PP_TUPLE_REVERSE(3,(A,B,C))
expands to (C,B,A)
.
For example,
- BOOST_PP_TUPLE_TO_LIST(3,(A,B,C)) +BOOST_PP_TUPLE_TO_LIST(3,(A,B,C))
expands to the same as
- BOOST_PP_LIST_CONS(A, - BOOST_PP_LIST_CONS(B, - BOOST_PP_LIST_CONS(C, - BOOST_PP_LIST_NIL))) +BOOST_PP_LIST_CONS(A, +BOOST_PP_LIST_CONS(B, +BOOST_PP_LIST_CONS(C, +BOOST_PP_LIST_NIL)))
In other words, expands to:
- OP(D, ... OP(D, OP(D,STATE) ) ... ) +OP(D, ... OP(D, OP(D,STATE) ) ... )
The depth of iteration is determined by PRED(D,STATE)
.
For example,
- #define PRED(D,STATE) BOOST_PP_LESS_D(D,BOOST_PP_TUPLE_ELEM(2,0,STATE),BOOST_PP_TUPLE_ELEM(2,1,STATE)) - #define OP(D,STATE) (BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2,0,STATE)),BOOST_PP_TUPLE_ELEM(2,1,STATE)) - BOOST_PP_WHILE(PRED,OP,(0,3)) +#define PRED(D,STATE) BOOST_PP_LESS_D(D,BOOST_PP_TUPLE_ELEM(2,0,STATE),BOOST_PP_TUPLE_ELEM(2,1,STATE)) +#define OP(D,STATE) (BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(2,0,STATE)),BOOST_PP_TUPLE_ELEM(2,1,STATE)) +BOOST_PP_WHILE(PRED,OP,(0,3))
expands to:
- (3,3) +(3,3)