diff --git a/doc/keywords.txt b/doc/keywords.txt index 9b8b701..5dbb179 100644 --- a/doc/keywords.txt +++ b/doc/keywords.txt @@ -57,6 +57,8 @@ BOOST_PP_LIST_FOLD_RIGHT_D BOOST_PP_LIST_FOLD_RIGHT_2ND BOOST_PP_LIST_FOLD_RIGHT_2ND_D BOOST_PP_LIST_FOR_EACH +BOOST_PP_LIST_FOR_EACH_I +BOOST_PP_LIST_FOR_EACH_I_R BOOST_PP_LIST_FOR_EACH_R BOOST_PP_LIST_FOR_EACH_PRODUCT BOOST_PP_LIST_FOR_EACH_PRODUCT_R diff --git a/doc/reference/index.htm b/doc/reference/index.htm index b8df380..2454a0a 100644 --- a/doc/reference/index.htm +++ b/doc/reference/index.htm @@ -80,6 +80,8 @@
Can be used inside BOOST_PP_FOR().
Revised
diff --git a/doc/reference/list_for_each_i.htm b/doc/reference/list_for_each_i.htm new file mode 100644 index 0000000..e6458a2 --- /dev/null +++ b/doc/reference/list_for_each_i.htm @@ -0,0 +1,65 @@ + + + +
+ |
+
+ Boost.Preprocessor+Reference+ |
+
Repeats F(R,P,I,BOOST_PP_LIST_AT(L,I))
for each I = [0,
+BOOST_PP_LIST_SIZE(L)[.
In other words, expands to the sequence:
+ ++ F(R,P,0,BOOST_PP_LIST_AT(L,0)) + F(R,P,1,BOOST_PP_LIST_AT(L,1)) + ... + F(R,P,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(L)),BOOST_PP_LIST_AT(L,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(L)))) ++ +
Can be used inside BOOST_PP_FOR().
+Revised
+ +© Copyright Housemarque Oy 2002
+ +Permission to copy, use, modify, sell and distribute this document is granted +provided this copyright notice appears in all copies. This document is provided +"as is" without express or implied warranty, and with no claim as to its suitability +for any purpose.
+ + diff --git a/doc/reference/list_for_each_product.htm b/doc/reference/list_for_each_product.htm index e19bf5f..08857a0 100644 --- a/doc/reference/list_for_each_product.htm +++ b/doc/reference/list_for_each_product.htm @@ -19,7 +19,7 @@Can be used inside BOOST_PP_FOR().
Revised
diff --git a/doc/reference/list_to_tuple.htm b/doc/reference/list_to_tuple.htm index 50cd365..519768f 100644 --- a/doc/reference/list_to_tuple.htm +++ b/doc/reference/list_to_tuple.htm @@ -55,7 +55,7 @@Can be used inside BOOST_PP_FOR().
Converts the list to a comma separated list.
@@ -34,14 +32,12 @@Can be used inside BOOST_PP_FOR().
*/ -#define BOOST_PP_LIST_ENUM_R(R,L) BOOST_PP_FOR##R((L,BOOST_PP_EMPTY),BOOST_PP_LIST_ENUM_C,BOOST_PP_LIST_ENUM_F,BOOST_PP_LIST_ENUM_I) -#define BOOST_PP_LIST_ENUM_C(R,P) BOOST_PP_TUPLE_ELEM(3,2,BOOST_PP_TUPLE_ELEM(2,0,P)) -#define BOOST_PP_LIST_ENUM_F(R,P) (BOOST_PP_TUPLE_ELEM(3,1,BOOST_PP_TUPLE_ELEM(2,0,P)),BOOST_PP_COMMA) -#define BOOST_PP_LIST_ENUM_I(R,P) BOOST_PP_TUPLE_ELEM(2,1,P)() BOOST_PP_TUPLE_ELEM(3,0,BOOST_PP_TUPLE_ELEM(2,0,P)) +#define BOOST_PP_LIST_ENUM_R(R,L) BOOST_PP_LIST_FOR_EACH_I_R(R,BOOST_PP_LIST_ENUM_F,_,L) +#define BOOST_PP_LIST_ENUM_F(R,_,I,X) BOOST_PP_COMMA_IF(I) X #endif diff --git a/include/boost/preprocessor/list/for_each.hpp b/include/boost/preprocessor/list/for_each.hpp index 36150dd..796ff20 100644 --- a/include/boost/preprocessor/list/for_each.hpp +++ b/include/boost/preprocessor/list/for_each.hpp @@ -13,8 +13,7 @@ * See http://www.boost.org for most recent version. */ -#includeRepeats F(R,P,BOOST_PP_LIST_AT(L,I))
for each I = [0,
BOOST_PP_LIST_SIZE(L)[.
Can be used inside BOOST_PP_FOR().
*/ -#define BOOST_PP_LIST_FOR_EACH_R(R,F,P,L) BOOST_PP_FOR##R((F,P,L),BOOST_PP_LIST_FOR_EACH_C,BOOST_PP_LIST_FOR_EACH_F,BOOST_PP_LIST_FOR_EACH_I) -#define BOOST_PP_LIST_FOR_EACH_C(R,FPL) BOOST_PP_TUPLE_ELEM(3,2,BOOST_PP_TUPLE_ELEM(3,2,FPL)) -#define BOOST_PP_LIST_FOR_EACH_F(R,FPL) (BOOST_PP_TUPLE_ELEM(3,0,FPL),BOOST_PP_TUPLE_ELEM(3,1,FPL),BOOST_PP_TUPLE_ELEM(3,1,BOOST_PP_TUPLE_ELEM(3,2,FPL))) -#define BOOST_PP_LIST_FOR_EACH_I(R,FPL) BOOST_PP_TUPLE_ELEM(3,0,FPL)(R,BOOST_PP_TUPLE_ELEM(3,1,FPL),BOOST_PP_TUPLE_ELEM(3,0,BOOST_PP_TUPLE_ELEM(3,2,FPL))) +#define BOOST_PP_LIST_FOR_EACH_R(R,F,P,L) BOOST_PP_LIST_FOR_EACH_I_R(R,BOOST_PP_LIST_FOR_EACH_F,(F,P),L) +#define BOOST_PP_LIST_FOR_EACH_F(R,FP,I,X) BOOST_PP_TUPLE_ELEM(2,0,FP)(R,BOOST_PP_TUPLE_ELEM(2,1,FP),X) #endif diff --git a/include/boost/preprocessor/list/for_each_i.hpp b/include/boost/preprocessor/list/for_each_i.hpp new file mode 100644 index 0000000..cb64ecb --- /dev/null +++ b/include/boost/preprocessor/list/for_each_i.hpp @@ -0,0 +1,44 @@ +#ifndef BOOST_PREPROCESSOR_LIST_FOR_EACH_I_HPP +#define BOOST_PREPROCESSOR_LIST_FOR_EACH_I_HPP + +/* Copyright (C) 2002 + * Housemarque Oy + * http://www.housemarque.com + * + * Permission to copy, use, modify, sell and distribute this software is + * granted provided this copyright notice appears in all copies. This + * software is provided "as is" without express or implied warranty, and + * with no claim as to its suitability for any purpose. + * + * See http://www.boost.org for most recent version. + */ + +#includeRepeats F(R,P,I,BOOST_PP_LIST_AT(L,I))
for each I = [0,
+BOOST_PP_LIST_SIZE(L)[.
In other words, expands to the sequence:
+ ++ F(R,P,0,BOOST_PP_LIST_AT(L,0)) + F(R,P,1,BOOST_PP_LIST_AT(L,1)) + ... + F(R,P,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(L)),BOOST_PP_LIST_AT(L,BOOST_PP_DEC(BOOST_PP_LIST_SIZE(L)))) ++ +
Can be used inside BOOST_PP_FOR().
*/ +#define BOOST_PP_LIST_FOR_EACH_I_R(R,F,P,L) BOOST_PP_FOR##R((F,P,L,0),BOOST_PP_LIST_FOR_EACH_I_C,BOOST_PP_LIST_FOR_EACH_I_F,BOOST_PP_LIST_FOR_EACH_I_I) +#define BOOST_PP_LIST_FOR_EACH_I_C(R,FPLI) BOOST_PP_TUPLE_ELEM(3,2,BOOST_PP_TUPLE_ELEM(4,2,FPLI)) +#define BOOST_PP_LIST_FOR_EACH_I_F(R,FPLI) (BOOST_PP_TUPLE_ELEM(4,0,FPLI),BOOST_PP_TUPLE_ELEM(4,1,FPLI),BOOST_PP_TUPLE_ELEM(3,1,BOOST_PP_TUPLE_ELEM(4,2,FPLI)),BOOST_PP_INC(BOOST_PP_TUPLE_ELEM(4,3,FPLI))) +#define BOOST_PP_LIST_FOR_EACH_I_I(R,FPLI) BOOST_PP_TUPLE_ELEM(4,0,FPLI)(R,BOOST_PP_TUPLE_ELEM(4,1,FPLI),BOOST_PP_TUPLE_ELEM(4,3,FPLI),BOOST_PP_TUPLE_ELEM(3,0,BOOST_PP_TUPLE_ELEM(4,2,FPLI))) +#endif diff --git a/include/boost/preprocessor/list/to_tuple.hpp b/include/boost/preprocessor/list/to_tuple.hpp index ec3b02f..4e19970 100644 --- a/include/boost/preprocessor/list/to_tuple.hpp +++ b/include/boost/preprocessor/list/to_tuple.hpp @@ -44,5 +44,5 @@ #define BOOST_PP_LIST_TO_TUPLE(L) BOOST_PP_LIST_TO_TUPLE_R(0,L) /**Can be used inside BOOST_PP_FOR().
*/ -#define BOOST_PP_LIST_TO_TUPLE_R(D,L) (BOOST_PP_LIST_ENUM_R(D,L)) +#define BOOST_PP_LIST_TO_TUPLE_R(R,L) (BOOST_PP_LIST_ENUM_R(R,L)) #endif