#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, ...