From 2fc11e125aea255cce1a9abb846bc581945ddf62 Mon Sep 17 00:00:00 2001 From: Vesa Karvonen Date: Sun, 24 Feb 2002 19:57:25 +0000 Subject: [PATCH] Added BOOST_PP_LIST_FOR_EACH_I [SVN r12928] --- doc/keywords.txt | 2 + doc/reference/index.htm | 3 + doc/reference/list_enum.htm | 2 +- doc/reference/list_for_each.htm | 6 +- doc/reference/list_for_each_i.htm | 65 +++++++++++++++++++ doc/reference/list_for_each_product.htm | 4 +- doc/reference/list_to_tuple.htm | 2 +- include/boost/preprocessor/list/enum.hpp | 14 ++-- include/boost/preprocessor/list/for_each.hpp | 11 ++-- .../boost/preprocessor/list/for_each_i.hpp | 44 +++++++++++++ include/boost/preprocessor/list/to_tuple.hpp | 2 +- 11 files changed, 131 insertions(+), 24 deletions(-) create mode 100644 doc/reference/list_for_each_i.htm create mode 100644 include/boost/preprocessor/list/for_each_i.hpp 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 @@
BOOST_PP_LIST_FOLD_RIGHT_2ND_D
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
@@ -212,6 +214,7 @@
#include <boost/preprocessor/list/fold_right.hpp>
#include <boost/preprocessor/list/fold_right_2nd.hpp>
#include <boost/preprocessor/list/for_each.hpp>
+
#include <boost/preprocessor/list/for_each_i.hpp>
#include <boost/preprocessor/list/for_each_product.hpp>
#include <boost/preprocessor/list/rest_n.hpp>
#include <boost/preprocessor/list/reverse.hpp>
diff --git a/doc/reference/list_enum.htm b/doc/reference/list_enum.htm index 56fd28d..8b8218c 100644 --- a/doc/reference/list_enum.htm +++ b/doc/reference/list_enum.htm @@ -43,7 +43,7 @@

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 @@

Can be used inside BOOST_PP_FOR().


-Prev Next Macros Headers +Prev Next Macros Headers

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 + + + + + + + +
+

C++ Boost

+
+

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)

+

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))))
+
+ +

Uses

+ + +
+ +

#define BOOST_PP_LIST_FOR_EACH_I_R(R,F,P,L)

+

Can be used inside BOOST_PP_FOR().

+
+ +Prev Next Macros Headers +
+ +

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 @@
-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().


-Prev Next Macros Headers +Prev Next Macros Headers

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 @@
-

#define BOOST_PP_LIST_TO_TUPLE_R(D,L)

+

#define BOOST_PP_LIST_TO_TUPLE_R(R,L)

Can be used inside BOOST_PP_FOR().


diff --git a/include/boost/preprocessor/list/enum.hpp b/include/boost/preprocessor/list/enum.hpp index 6839bad..beb9e63 100644 --- a/include/boost/preprocessor/list/enum.hpp +++ b/include/boost/preprocessor/list/enum.hpp @@ -13,10 +13,8 @@ * See http://www.boost.org for most recent version. */ -#include -#include -#include -#include +#include +#include /**

Converts the list to a comma separated list.

@@ -34,14 +32,12 @@

Uses

    -
  • BOOST_PP_FOR()
  • +
  • BOOST_PP_LIST_FOR_EACH_I()
*/ #define BOOST_PP_LIST_ENUM(L) BOOST_PP_LIST_ENUM_R(0,L) /**

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. */ -#include -#include +#include /**

Repeats F(R,P,BOOST_PP_LIST_AT(L,I)) for each I = [0, BOOST_PP_LIST_SIZE(L)[.

@@ -35,7 +34,7 @@ BOOST_PP_LIST_SIZE(L)[.

Uses

    -
  • BOOST_PP_FOR()
  • +
  • BOOST_PP_LIST_FOR_EACH_I()

Test

@@ -46,8 +45,6 @@ BOOST_PP_LIST_SIZE(L)[.

#define BOOST_PP_LIST_FOR_EACH(F,P,L) BOOST_PP_LIST_FOR_EACH_R(0,F,P,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. + */ + +#include +#include +#include + +/**

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))))
+
+ +

Uses

+
    +
  • BOOST_PP_FOR()
  • +
+*/ +#define BOOST_PP_LIST_FOR_EACH_I(F,P,L) BOOST_PP_LIST_FOR_EACH_I_R(0,F,P,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