diff --git a/example/array_arithmetic.c b/example/array_arithmetic.c index 6c0ceb0..87a9f73 100644 --- a/example/array_arithmetic.c +++ b/example/array_arithmetic.c @@ -118,9 +118,8 @@ #define IS_VALID_BINARY_OP_AND_TYPE_COMBINATION(O,L,R) BOOST_PP_IF(BOOST_PP_OR(TYPE_IS_FLOATING(L),TYPE_IS_FLOATING(R)),OP_IS_FLOATING(O),1) /* Generates code for all all unary operators and integral types. */ -#define UNARY_ARRAY_OP(R,L) UNARY_ARRAY_OP2(BOOST_PP_TUPLE_ELEM(2,0,L),BOOST_PP_TUPLE_ELEM(2,1,L)) -#define UNARY_ARRAY_OP2(O,T) BOOST_PP_IF(IS_VALID_UNARY_OP_AND_TYPE_COMBINATION(O,T),UNARY_ARRAY_OP3,BOOST_PP_TUPLE2_EAT)(O,T) -#define UNARY_ARRAY_OP3(O,T)\ +#define UNARY_ARRAY_OP(_,OT) BOOST_PP_IF(IS_VALID_UNARY_OP_AND_TYPE_COMBINATION OT,UNARY_ARRAY_OP_CODE,BOOST_PP_TUPLE2_EAT) OT +#define UNARY_ARRAY_OP_CODE(O,T)\ void BOOST_PP_LIST_CAT(BOOST_PP_TUPLE_TO_LIST(4,(array_,OP_NAME(O),_,TYPE_ABBREVIATION(T))))\ ( const TYPE_NAME(T)* in\ , TYPE_NAME(TYPE_OF_UNARY_OP(O,T))* out\ @@ -134,9 +133,8 @@ BOOST_PP_LIST_FOR_EACH_PRODUCT(UNARY_ARRAY_OP,2,(APPLICATIVE_UNARY_OPS,BUILTIN_TYPES)) /* Generates code for all binary operators and integral type pairs. */ -#define BINARY_ARRAY_OP(R,L) BINARY_ARRAY_OP2(BOOST_PP_TUPLE_ELEM(3,0,L),BOOST_PP_TUPLE_ELEM(3,1,L),BOOST_PP_TUPLE_ELEM(3,2,L)) -#define BINARY_ARRAY_OP2(O,L,R) BOOST_PP_IF(IS_VALID_BINARY_OP_AND_TYPE_COMBINATION(O,L,R),BINARY_ARRAY_OP3,BOOST_PP_TUPLE3_EAT)(O,L,R) -#define BINARY_ARRAY_OP3(O,L,R)\ +#define BINARY_ARRAY_OP(_,OLR) BOOST_PP_IF(IS_VALID_BINARY_OP_AND_TYPE_COMBINATION OLR,BINARY_ARRAY_OP_CODE,BOOST_PP_TUPLE3_EAT) OLR +#define BINARY_ARRAY_OP_CODE(O,L,R)\ void BOOST_PP_LIST_CAT(BOOST_PP_TUPLE_TO_LIST(6,(array_,OP_NAME(O),_,TYPE_ABBREVIATION(L),_,TYPE_ABBREVIATION(R))))\ ( const TYPE_NAME(L)* lhs_in\ , const TYPE_NAME(R)* rhs_in\