#include <boost/preprocessor/cat.hpp>#include <boost/preprocessor/facilities/intercept.hpp>#include <boost/preprocessor/repetition/enum.hpp>#include <boost/preprocessor/repetition/enum_params.hpp>#include <boost/preprocessor/repetition/enum_binary_params.hpp>#include <boost/preprocessor/iteration/local.hpp>#include <boost/preprocessor/tuple/elem.hpp>#include <boost/proto/proto_fwd.hpp>

Macros | |
| #define | BOOST_PROTO_ref_a_aux(Z, N, DATA) boost::ref(BOOST_PP_CAT(proto_a, N)) | 
| INTERNAL ONLY.  More... | |
| #define | BOOST_PROTO_typename_A(N) BOOST_PP_ENUM_PARAMS(N, typename proto_A) | 
Generates a sequence like typename A0, typename A1, ...  More... | |
| #define | BOOST_PROTO_A_const_ref(N) BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, const & BOOST_PP_INTERCEPT) | 
Generates a sequence like A0 const &, A1 const &, ...  More... | |
| #define | BOOST_PROTO_A_ref(N) BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, & BOOST_PP_INTERCEPT) | 
Generates a sequence like A0 &, A1 &, ...  More... | |
| #define | BOOST_PROTO_A(N) BOOST_PP_ENUM_PARAMS(N, proto_A) | 
Generates a sequence like A0, A1, ...  More... | |
| #define | BOOST_PROTO_A_const(N) BOOST_PP_ENUM_PARAMS(N, const proto_A) | 
Generates a sequence like A0 const, A1 const, ...  More... | |
| #define | BOOST_PROTO_A_const_ref_a(N) BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, const &proto_a) | 
Generates a sequence like A0 const &a0, A1 const &a0, ...  More... | |
| #define | BOOST_PROTO_A_ref_a(N) BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, &proto_a) | 
Generates a sequence like A0 &a0, A1 &a0, ...  More... | |
| #define | BOOST_PROTO_ref_a(N) BOOST_PP_ENUM(N, BOOST_PROTO_ref_a_aux, ~) | 
Generates a sequence like boost::ref(a0), boost::ref(a1), ...  More... | |
| #define | BOOST_PROTO_a(N) BOOST_PP_ENUM_PARAMS(N, proto_a) | 
Generates a sequence like a0, a1, ...  More... | |
| #define | BOOST_PROTO_invoke(Z, N, DATA) BOOST_PP_TUPLE_ELEM(5,0,DATA)(N, BOOST_PP_TUPLE_ELEM(5,1,DATA), BOOST_PP_TUPLE_ELEM(5,2,DATA), BOOST_PP_TUPLE_ELEM(5,3,DATA), BOOST_PP_TUPLE_ELEM(5,4,DATA)) | 
| INTERNAL ONLY.  More... | |
| #define | BOOST_PROTO_REPEAT_FROM_TO_EX(FROM, TO, MACRO, typename_A, A, A_a, a) BOOST_PP_REPEAT_FROM_TO(FROM, TO, BOOST_PROTO_invoke, (MACRO, typename_A, A, A_a, a)) | 
| Repeatedly invoke the specified macro.  More... | |
| #define | BOOST_PROTO_REPEAT_FROM_TO(FROM, TO, MACRO) BOOST_PROTO_REPEAT_FROM_TO_EX(FROM, TO, MACRO, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a) | 
| Repeatedly invoke the specified macro.  More... | |
| #define | BOOST_PROTO_REPEAT_EX(MACRO, typename_A, A, A_a, a) BOOST_PROTO_REPEAT_FROM_TO_EX(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), MACRO, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a) | 
| Repeatedly invoke the specified macro.  More... | |
| #define | BOOST_PROTO_REPEAT(MACRO) BOOST_PROTO_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), MACRO) | 
| Repeatedly invoke the specified macro.  More... | |
| #define | BOOST_PROTO_LOCAL_ITERATE() <boost/proto/detail/local.hpp> | 
| Repeatedly invoke the specified macro.  More... | |
| #define BOOST_PROTO_A | ( | N | ) | BOOST_PP_ENUM_PARAMS(N, proto_A) | 
Generates a sequence like A0, A1, ... 
| #define BOOST_PROTO_a | ( | N | ) | BOOST_PP_ENUM_PARAMS(N, proto_a) | 
Generates a sequence like a0, a1, ... 
| #define BOOST_PROTO_A_const | ( | N | ) | BOOST_PP_ENUM_PARAMS(N, const proto_A) | 
Generates a sequence like A0 const, A1 const, ... 
| #define BOOST_PROTO_A_const_ref | ( | N | ) | BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, const & BOOST_PP_INTERCEPT) | 
Generates a sequence like A0 const &, A1 const &, ... 
| #define BOOST_PROTO_A_const_ref_a | ( | N | ) | BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, const &proto_a) | 
Generates a sequence like A0 const &a0, A1 const &a0, ... 
| #define BOOST_PROTO_A_ref | ( | N | ) | BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, & BOOST_PP_INTERCEPT) | 
Generates a sequence like A0 &, A1 &, ... 
| #define BOOST_PROTO_A_ref_a | ( | N | ) | BOOST_PP_ENUM_BINARY_PARAMS(N, proto_A, &proto_a) | 
Generates a sequence like A0 &a0, A1 &a0, ... 
| #define BOOST_PROTO_invoke | ( | Z, | |
| N, | |||
| DATA | |||
| ) | BOOST_PP_TUPLE_ELEM(5,0,DATA)(N, BOOST_PP_TUPLE_ELEM(5,1,DATA), BOOST_PP_TUPLE_ELEM(5,2,DATA), BOOST_PP_TUPLE_ELEM(5,3,DATA), BOOST_PP_TUPLE_ELEM(5,4,DATA)) | 
INTERNAL ONLY.
| #define BOOST_PROTO_LOCAL_ITERATE | ( | ) | <boost/proto/detail/local.hpp> | 
Repeatedly invoke the specified macro.
BOOST_PROTO_LOCAL_ITERATE() is used generate the kind of repetitive code that is typical of EDSLs built with Proto. This macro causes the user-defined macro BOOST_PROTO_LOCAL_MACRO to be expanded with values in the range specified by BOOST_PROTO_LOCAL_LIMITS.
Usage:
Example:
The above inclusion of BOOST_PROTO_LOCAL_ITERATE() will generate the following code:
If BOOST_PROTO_LOCAL_LIMITS is not defined by the user, it defaults to (1, BOOST_PROTO_MAX_ARITY)
At each iteration, BOOST_PROTO_LOCAL_MACRO is invoked with the current iteration number and the following 4 macro parameters:
If these macros are not defined by the user, they default respectively to:
After including BOOST_PROTO_LOCAL_ITERATE(), the following macros are automatically undefined:
| #define BOOST_PROTO_ref_a | ( | N | ) | BOOST_PP_ENUM(N, BOOST_PROTO_ref_a_aux, ~) | 
Generates a sequence like boost::ref(a0), boost::ref(a1), ... 
| #define BOOST_PROTO_ref_a_aux | ( | Z, | |
| N, | |||
| DATA | |||
| ) | boost::ref(BOOST_PP_CAT(proto_a, N)) | 
INTERNAL ONLY.
| #define BOOST_PROTO_REPEAT | ( | MACRO | ) | BOOST_PROTO_REPEAT_FROM_TO(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), MACRO) | 
Repeatedly invoke the specified macro.
BOOST_PROTO_REPEAT() is used generate the kind of repetitive code that is typical of EDSLs built with Proto. BOOST_PROTO_REPEAT(MACRO) is equivalent to:
| #define BOOST_PROTO_REPEAT_EX | ( | MACRO, | |
| typename_A, | |||
| A, | |||
| A_a, | |||
| a | |||
| ) | BOOST_PROTO_REPEAT_FROM_TO_EX(1, BOOST_PP_INC(BOOST_PROTO_MAX_ARITY), MACRO, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a) | 
Repeatedly invoke the specified macro.
BOOST_PROTO_REPEAT_EX() is used generate the kind of repetitive code that is typical of EDSLs built with Proto. BOOST_PROTO_REPEAT_EX(MACRO, typename_A, A, A_a, a) is equivalent to:
| #define BOOST_PROTO_REPEAT_FROM_TO | ( | FROM, | |
| TO, | |||
| MACRO | |||
| ) | BOOST_PROTO_REPEAT_FROM_TO_EX(FROM, TO, MACRO, BOOST_PROTO_typename_A, BOOST_PROTO_A_const_ref, BOOST_PROTO_A_const_ref_a, BOOST_PROTO_ref_a) | 
Repeatedly invoke the specified macro.
BOOST_PROTO_REPEAT_FROM_TO() is used generate the kind of repetitive code that is typical of EDSLs built with Proto. BOOST_PROTO_REPEAT_FROM_TO(FROM, TO, MACRO) is equivalent to:
Example:
The above invocation of BOOST_PROTO_REPEAT_FROM_TO() will generate the following code:
| #define BOOST_PROTO_REPEAT_FROM_TO_EX | ( | FROM, | |
| TO, | |||
| MACRO, | |||
| typename_A, | |||
| A, | |||
| A_a, | |||
| a | |||
| ) | BOOST_PP_REPEAT_FROM_TO(FROM, TO, BOOST_PROTO_invoke, (MACRO, typename_A, A, A_a, a)) | 
Repeatedly invoke the specified macro.
BOOST_PROTO_REPEAT_FROM_TO_EX() is used generate the kind of repetitive code that is typical of EDSLs built with Proto. BOOST_PROTO_REPEAT_FROM_TO_EX(FROM, TO, MACRO, typename_A, A, A_a, a) is equivalent to:
| #define BOOST_PROTO_typename_A | ( | N | ) | BOOST_PP_ENUM_PARAMS(N, typename proto_A) | 
Generates a sequence like typename A0, typename A1, ...