From 2fc11e125aea255cce1a9abb846bc581945ddf62 Mon Sep 17 00:00:00 2001
From: Vesa Karvonen Can be used inside BOOST_PP_FOR(). Revised Repeats In other words, expands to the sequence: 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.Uses
-
diff --git a/doc/reference/list_for_each.htm b/doc/reference/list_for_each.htm
index 2ca6563..40161d3 100644
--- a/doc/reference/list_for_each.htm
+++ b/doc/reference/list_for_each.htm
@@ -19,7 +19,7 @@
-Prev Next Macros Headers
+Prev Next Macros Headers
#include <boost/preprocessor/list/for_each.hpp>
@@ -46,7 +46,7 @@
Uses
-
Test
@@ -60,7 +60,7 @@
-Prev Next Macros Headers
+Prev Next Macros Headers
+
+
+
+
+
+
+
+
+
+ Boost.Preprocessor
+ Reference
+
+
+Prev Next Macros Headers
+
+
+#include <boost/preprocessor/list/for_each_i.hpp>
+
+
+
+#define BOOST_PP_LIST_FOR_EACH_I(F,P,L)
+ F(R,P,I,BOOST_PP_LIST_AT(L,I))
for each I = [0,
+BOOST_PP_LIST_SIZE(L)[.
+ 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))))
+
+
+Uses
+
+
+
+
+
+#define BOOST_PP_LIST_FOR_EACH_I_R(R,F,P,L)
+
+
+Prev Next Macros Headers
+
+
+
-Prev Next Macros Headers
+Prev Next Macros Headers
#include <boost/preprocessor/list/for_each_product.hpp>
@@ -55,7 +55,7 @@ explosion.
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