diff --git a/CMakeLists.txt b/CMakeLists.txt index b6666d7..40f14a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -251,12 +251,22 @@ file( ) list(FILTER IRIS_HEADERS EXCLUDE REGEX /include/iris/marshal[./]) +file(GLOB IRIS_PP_HEADERS ${PROJECT_SOURCE_DIR}/include/iris/pp/*.hpp) +set( + IRIS_TUPLE_IMPL_GENERATE_DEPENDS + ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/tuple_impl.hpp + ${IRIS_PP_HEADERS} + ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/preprocessed/tuple_impl.hpp.pre.in + ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/preprocessed/tuple_impl.hpp.post.in + ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/preprocessed/.clang-format +) + if(MSVC) add_custom_command( OUTPUT ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/preprocessed/tuple_impl.hpp COMMAND ${PROJECT_SOURCE_DIR}/scripts/generate_tuple_members.bat WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - DEPENDS ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/tuple_impl.hpp + DEPENDS ${IRIS_TUPLE_IMPL_GENERATE_DEPENDS} ${PROJECT_SOURCE_DIR}/scripts/generate_tuple_members.bat VERBATIM ) else() @@ -264,7 +274,7 @@ else() OUTPUT ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/preprocessed/tuple_impl.hpp COMMAND ${PROJECT_SOURCE_DIR}/scripts/generate_tuple_members.sh WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - DEPENDS ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/tuple_impl.hpp + DEPENDS ${IRIS_TUPLE_IMPL_GENERATE_DEPENDS} ${PROJECT_SOURCE_DIR}/scripts/generate_tuple_members.sh VERBATIM ) endif() diff --git a/include/iris/alloy/adapt.hpp b/include/iris/alloy/adapt.hpp index 2dfde30..5678808 100644 --- a/include/iris/alloy/adapt.hpp +++ b/include/iris/alloy/adapt.hpp @@ -7,9 +7,7 @@ #include // IWYU pragma: keep -#include -#include -#include +#include namespace iris::alloy { @@ -18,19 +16,14 @@ struct adaptor; } // iris::alloy -#define IRIS_ZZ_ALLOY_ADAPT_STRUCT_I(index, data_member, class_name) \ - IRIS_PP_COMMA_IF(index) & class_name::data_member +#define IRIS_ZZ_ALLOY_ADAPT_STRUCT_I(data_member, class_name) & class_name::data_member #define IRIS_ALLOY_ADAPT_STRUCT(class_name, ...) \ template<> \ struct iris::alloy::adaptor \ { \ using getters_list = iris::constant_list< \ - IRIS_PP_SEQ_FOR_EACH_WITH_INDEX( \ - IRIS_PP_TUPLE_TO_SEQ((__VA_ARGS__)), \ - IRIS_ZZ_ALLOY_ADAPT_STRUCT_I, \ - class_name \ - ) \ + IRIS_PP_VA_ENUM(IRIS_ZZ_ALLOY_ADAPT_STRUCT_I, class_name, __VA_ARGS__) \ >; \ }; diff --git a/include/iris/marshal/adapt.hpp b/include/iris/marshal/adapt.hpp index 2515852..5e2fa76 100644 --- a/include/iris/marshal/adapt.hpp +++ b/include/iris/marshal/adapt.hpp @@ -12,9 +12,11 @@ #include #include +#include #include #include #include +#include #include @@ -109,7 +111,7 @@ using setter_param_t = std::conditional_t< #define IRIS_MARSHAL_FIELD_GET(maybe_paren_type, field_name, ...) \ IRIS_ZZ_MARSHAL_FIELD_DATA_MEMBER(maybe_paren_type, field_name, __VA_ARGS__) \ - IRIS_PP_IF( \ + IRIS_PP_IIF( \ IRIS_PP_IS_PAREN( IRIS_PP_CAT_ONLY_TWO(IRIS_ZZ_MARSHAL_FIELD_TYPE_IS_, IRIS_PP_UNPAREN_IF_PAREN(maybe_paren_type)) ), \ IRIS_ZZ_MARSHAL_FIELD_BOOL_GET, \ IRIS_ZZ_MARSHAL_FIELD_GET_I \ @@ -121,7 +123,7 @@ using setter_param_t = std::conditional_t< #define IRIS_MARSHAL_FIELD_GET_SET(maybe_paren_type, field_name, ...) \ IRIS_ZZ_MARSHAL_FIELD_DATA_MEMBER(maybe_paren_type, field_name, __VA_ARGS__) \ - IRIS_PP_IF( \ + IRIS_PP_IIF( \ IRIS_PP_IS_PAREN( IRIS_PP_CAT_ONLY_TWO(IRIS_ZZ_MARSHAL_FIELD_TYPE_IS_, IRIS_PP_UNPAREN_IF_PAREN(maybe_paren_type)) ), \ IRIS_ZZ_MARSHAL_FIELD_BOOL_GET_SET, \ IRIS_ZZ_MARSHAL_FIELD_GET_SET_I \ @@ -162,7 +164,7 @@ using setter_param_t = std::conditional_t< // pimpl declare #define IRIS_ZZ_MARSHAL_PIMPL_FIELD_DECLARE_FIELD_I(maybe_paren_type, field_name, ...) \ - IRIS_PP_IF( \ + IRIS_PP_IIF( \ IRIS_PP_IS_PAREN( IRIS_PP_CAT_ONLY_TWO(IRIS_ZZ_MARSHAL_FIELD_TYPE_IS_, IRIS_PP_UNPAREN_IF_PAREN(maybe_paren_type)) ), \ IRIS_ZZ_MARSHAL_FIELD_BOOL_GET_SET, \ IRIS_ZZ_MARSHAL_FIELD_GET_SET_I \ @@ -191,7 +193,7 @@ using setter_param_t = std::conditional_t< #define IRIS_ZZ_MARSHAL_PIMPL_FIELD_VARIABLE(field_name) impl_->field_name #define IRIS_ZZ_MARSHAL_PIMPL_FIELD_ACCESS_DEFINE_FIELD_I(class_name, maybe_paren_type, field_name, ...) \ - IRIS_PP_IF( \ + IRIS_PP_IIF( \ IRIS_PP_IS_PAREN( IRIS_PP_CAT_ONLY_TWO(IRIS_ZZ_MARSHAL_FIELD_TYPE_IS_, IRIS_PP_UNPAREN_IF_PAREN(maybe_paren_type)) ), \ IRIS_ZZ_MARSHAL_FIELD_BOOL_GET_SET, \ IRIS_ZZ_MARSHAL_FIELD_GET_SET_I \ @@ -249,32 +251,28 @@ using setter_param_t = std::conditional_t< IRIS_ZZ_MARSHAL_SELECT_MEMBER_ACCESS(class_name, field_name, set) \ >{IRIS_PP_STRINGIZE(field_name)}, -#define IRIS_ZZ_MARSHAL_ADAPT_I(class_name, field_defs) \ +#define IRIS_ZZ_MARSHAL_ADAPT_I(class_name, fields_init) \ template<> \ struct iris::marshal::adapted_class_traits \ { \ inline static constexpr auto fields = ::iris::alloy::tuple{ \ - IRIS_PP_SEQ_FOR_EACH( \ - field_defs, \ - IRIS_ZZ_MARSHAL_ADAPT_FIELD, \ - class_name \ - ) \ + fields_init \ }; \ }; #define IRIS_MARSHAL_ADAPT(class_name, ...) \ IRIS_ZZ_MARSHAL_ADAPT_I( \ class_name, \ - IRIS_PP_TUPLE_TO_SEQ((__VA_ARGS__)) \ + IRIS_PP_VA_FOR_EACH(IRIS_ZZ_MARSHAL_ADAPT_FIELD, class_name, __VA_ARGS__) \ ) -#define IRIS_ZZ_MARSHAL_ADAPT_DEFS_EXTRACT_FIELD_NAME(field_def, macro_data) \ - (IRIS_PP_TUPLE_ELEM(1, field_def)) +#define IRIS_ZZ_MARSHAL_ADAPT_DEFS_FIELD(field_def, class_name) \ + IRIS_ZZ_MARSHAL_ADAPT_FIELD(IRIS_PP_TUPLE_ELEM(1, field_def), class_name) #define IRIS_MARSHAL_ADAPT_DEFS(class_name, field_defs) \ IRIS_ZZ_MARSHAL_ADAPT_I( \ class_name, \ - IRIS_PP_SEQ_FOR_EACH(field_defs, IRIS_ZZ_MARSHAL_ADAPT_DEFS_EXTRACT_FIELD_NAME, ~) \ + IRIS_PP_SEQ_FOR_EACH(field_defs, IRIS_ZZ_MARSHAL_ADAPT_DEFS_FIELD, class_name) \ ) } // iris::marshal diff --git a/include/iris/pp/add.hpp b/include/iris/pp/add.hpp index 10d5716..cb6ed73 100644 --- a/include/iris/pp/add.hpp +++ b/include/iris/pp/add.hpp @@ -4,19 +4,42 @@ // SPDX-License-Identifier: MIT #include -#include #include -#include -#define IRIS_PP_ADD(a, b) IRIS_ZZ_PP_ADD_I_FIRST(IRIS_PP_WHILE((a, b), IRIS_ZZ_PP_ADD_I_PRED, IRIS_ZZ_PP_ADD_I_UPDATE)) +#define IRIS_PP_ADD(a, b) IRIS_PP_CAT(IRIS_ZZ_PP_ADD_I_, b)(a) -#define IRIS_ZZ_PP_ADD_I_FIRST(state) IRIS_ZZ_PP_ADD_I_FIRST_I state -#define IRIS_ZZ_PP_ADD_I_FIRST_I(a, b) a - -#define IRIS_ZZ_PP_ADD_I_PRED(state) IRIS_ZZ_PP_ADD_I_PRED_I state -#define IRIS_ZZ_PP_ADD_I_PRED_I(a, b) b - -#define IRIS_ZZ_PP_ADD_I_UPDATE(state) IRIS_ZZ_PP_ADD_I_UPDATE_I state -#define IRIS_ZZ_PP_ADD_I_UPDATE_I(a, b) (IRIS_PP_INCREMENT(a), IRIS_PP_DECREMENT(b)) +#define IRIS_ZZ_PP_ADD_I_0(a) a +#define IRIS_ZZ_PP_ADD_I_1(a) IRIS_ZZ_PP_ADD_I_0(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_2(a) IRIS_ZZ_PP_ADD_I_1(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_3(a) IRIS_ZZ_PP_ADD_I_2(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_4(a) IRIS_ZZ_PP_ADD_I_3(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_5(a) IRIS_ZZ_PP_ADD_I_4(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_6(a) IRIS_ZZ_PP_ADD_I_5(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_7(a) IRIS_ZZ_PP_ADD_I_6(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_8(a) IRIS_ZZ_PP_ADD_I_7(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_9(a) IRIS_ZZ_PP_ADD_I_8(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_10(a) IRIS_ZZ_PP_ADD_I_9(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_11(a) IRIS_ZZ_PP_ADD_I_10(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_12(a) IRIS_ZZ_PP_ADD_I_11(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_13(a) IRIS_ZZ_PP_ADD_I_12(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_14(a) IRIS_ZZ_PP_ADD_I_13(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_15(a) IRIS_ZZ_PP_ADD_I_14(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_16(a) IRIS_ZZ_PP_ADD_I_15(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_17(a) IRIS_ZZ_PP_ADD_I_16(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_18(a) IRIS_ZZ_PP_ADD_I_17(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_19(a) IRIS_ZZ_PP_ADD_I_18(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_20(a) IRIS_ZZ_PP_ADD_I_19(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_21(a) IRIS_ZZ_PP_ADD_I_20(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_22(a) IRIS_ZZ_PP_ADD_I_21(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_23(a) IRIS_ZZ_PP_ADD_I_22(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_24(a) IRIS_ZZ_PP_ADD_I_23(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_25(a) IRIS_ZZ_PP_ADD_I_24(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_26(a) IRIS_ZZ_PP_ADD_I_25(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_27(a) IRIS_ZZ_PP_ADD_I_26(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_28(a) IRIS_ZZ_PP_ADD_I_27(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_29(a) IRIS_ZZ_PP_ADD_I_28(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_30(a) IRIS_ZZ_PP_ADD_I_29(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_31(a) IRIS_ZZ_PP_ADD_I_30(IRIS_PP_INCREMENT(a)) +#define IRIS_ZZ_PP_ADD_I_32(a) IRIS_ZZ_PP_ADD_I_31(IRIS_PP_INCREMENT(a)) #endif diff --git a/include/iris/pp/for.hpp b/include/iris/pp/for.hpp index 5d4001e..fa36416 100644 --- a/include/iris/pp/for.hpp +++ b/include/iris/pp/for.hpp @@ -7,105 +7,72 @@ #define IRIS_PP_FOR(state, pred, update, macro) IRIS_ZZ_PP_FOR_I_0(state, pred, update, macro) -#define IRIS_ZZ_PP_FOR_I_0(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_0(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_1(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_1(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_2(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_2(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_3(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_3(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_4(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_4(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_5(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_5(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_6(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_6(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_7(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_7(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_8(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_8(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_9(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_9(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_10(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_10(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_11(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_11(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_12(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_12(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_13(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_13(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_14(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_14(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_15(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_15(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_16(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_16(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_17(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_17(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_18(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_18(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_19(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_19(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_20(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_20(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_21(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_21(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_22(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_22(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_23(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_23(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_24(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_24(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_25(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_25(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_26(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_26(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_27(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_27(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_28(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_28(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_29(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_29(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_30(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_30(state, pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_31(state, pred, op, macro) IRIS_ZZ_PP_FOR_I_I_31(state, pred, op, macro) - -#define IRIS_ZZ_PP_FOR_I_EAT_1(a1) #define IRIS_ZZ_PP_FOR_I_EAT_4(a1, a2, a3, a4) -#define IRIS_ZZ_PP_FOR_I_I_0(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_1, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_1(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_2, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_2(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_3, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_3(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_4, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_4(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_5, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_5(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_6, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_6(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_7, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_7(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_8, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_8(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_9, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_9(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_10, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_10(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_11, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_11(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_12, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_12(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_13, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_13(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_14, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_14(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_15, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_15(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_16, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_16(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_17, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_17(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_18, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_18(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_19, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_19(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_20, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_20(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_21, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_21(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_22, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_22(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_23, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_23(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_24, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_24(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_25, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_25(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_26, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_26(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_27, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_27(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_28, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_28(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_29, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_29(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_30, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_30(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_31, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) -#define IRIS_ZZ_PP_FOR_I_I_31(state, pred, op, macro) \ - IRIS_PP_IF(pred(state), macro, IRIS_ZZ_PP_FOR_I_EAT_1)(state) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_32, IRIS_ZZ_PP_FOR_I_EAT_4)(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_0(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_0, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_1(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_1, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_2(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_2, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_3(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_3, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_4(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_4, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_5(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_5, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_6(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_6, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_7(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_7, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_8(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_8, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_9(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_9, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_10(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_10, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_11(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_11, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_12(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_12, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_13(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_13, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_14(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_14, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_15(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_15, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_16(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_16, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_17(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_17, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_18(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_18, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_19(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_19, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_20(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_20, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_21(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_21, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_22(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_22, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_23(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_23, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_24(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_24, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_25(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_25, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_26(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_26, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_27(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_27, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_28(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_28, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_29(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_29, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_30(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_30, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_31(state, pred, op, macro) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_FOR_I_BODY_31, IRIS_ZZ_PP_FOR_I_EAT_4)(state, pred, op, macro) + +#define IRIS_ZZ_PP_FOR_I_BODY_0(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_1(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_1(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_2(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_2(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_3(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_3(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_4(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_4(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_5(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_5(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_6(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_6(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_7(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_7(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_8(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_8(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_9(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_9(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_10(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_10(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_11(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_11(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_12(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_12(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_13(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_13(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_14(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_14(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_15(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_15(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_16(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_16(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_17(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_17(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_18(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_18(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_19(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_19(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_20(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_20(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_21(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_21(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_22(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_22(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_23(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_23(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_24(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_24(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_25(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_25(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_26(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_26(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_27(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_27(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_28(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_28(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_29(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_29(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_30(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_30(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_31(op(state), pred, op, macro) +#define IRIS_ZZ_PP_FOR_I_BODY_31(state, pred, op, macro) macro(state) IRIS_ZZ_PP_FOR_I_32(op(state), pred, op, macro) #endif diff --git a/include/iris/pp/rec.hpp b/include/iris/pp/rec.hpp index 00f65a5..9ce977b 100644 --- a/include/iris/pp/rec.hpp +++ b/include/iris/pp/rec.hpp @@ -19,6 +19,6 @@ #define IRIS_ZZ_PP_REC_I_NODE_6(pred) IRIS_PP_IF(pred(6), IRIS_ZZ_PP_REC_I_NODE_5, IRIS_ZZ_PP_REC_I_NODE_7) #define IRIS_ZZ_PP_REC_I_NODE_5(pred) IRIS_PP_IF(pred(5), 5, 6) -#define IRIS_ZZ_PP_REC_I_NODE_7(pred) IRIS_PP_IF(pred(5), 7, 8) +#define IRIS_ZZ_PP_REC_I_NODE_7(pred) IRIS_PP_IF(pred(7), 7, 8) #endif diff --git a/include/iris/pp/repeat.hpp b/include/iris/pp/repeat.hpp index c2fe7e9..8a6c012 100644 --- a/include/iris/pp/repeat.hpp +++ b/include/iris/pp/repeat.hpp @@ -8,7 +8,7 @@ #include #include -#define IRIS_PP_REPEAT IRIS_PP_CAT(IRIS_ZZ_PP_REPEAT_, IRIS_PP_REC(IRIS_ZZ_PP_REPEAT_I_PRED, 8)) +#define IRIS_PP_REPEAT IRIS_PP_CAT(IRIS_ZZ_PP_REPEAT_, IRIS_PP_REC(IRIS_ZZ_PP_REPEAT_I_PRED, 4)) #define IRIS_ZZ_PP_REPEAT_I_EAT_2(a, b) #define IRIS_ZZ_PP_REPEAT_I_PRED(n) \ @@ -19,33 +19,21 @@ #define IRIS_ZZ_PP_REPEAT_I_CHECK_IRIS_ZZ_PP_REPEAT_2(count, macro, data) 0 #define IRIS_ZZ_PP_REPEAT_I_CHECK_IRIS_ZZ_PP_REPEAT_3(count, macro, data) 0 #define IRIS_ZZ_PP_REPEAT_I_CHECK_IRIS_ZZ_PP_REPEAT_4(count, macro, data) 0 -#define IRIS_ZZ_PP_REPEAT_I_CHECK_IRIS_ZZ_PP_REPEAT_5(count, macro, data) 0 -#define IRIS_ZZ_PP_REPEAT_I_CHECK_IRIS_ZZ_PP_REPEAT_6(count, macro, data) 0 -#define IRIS_ZZ_PP_REPEAT_I_CHECK_IRIS_ZZ_PP_REPEAT_7(count, macro, data) 0 -#define IRIS_ZZ_PP_REPEAT_I_CHECK_IRIS_ZZ_PP_REPEAT_8(count, macro, data) 0 #define IRIS_ZZ_PP_REPEAT_1(count, macro, data) IRIS_PP_CAT(IRIS_ZZ_PP_REPEAT_1_I_, count)(macro, data) #define IRIS_ZZ_PP_REPEAT_2(count, macro, data) IRIS_PP_CAT(IRIS_ZZ_PP_REPEAT_2_I_, count)(macro, data) #define IRIS_ZZ_PP_REPEAT_3(count, macro, data) IRIS_PP_CAT(IRIS_ZZ_PP_REPEAT_3_I_, count)(macro, data) #define IRIS_ZZ_PP_REPEAT_4(count, macro, data) IRIS_PP_CAT(IRIS_ZZ_PP_REPEAT_4_I_, count)(macro, data) -#define IRIS_ZZ_PP_REPEAT_5(count, macro, data) IRIS_PP_CAT(IRIS_ZZ_PP_REPEAT_5_I_, count)(macro, data) -#define IRIS_ZZ_PP_REPEAT_6(count, macro, data) IRIS_PP_CAT(IRIS_ZZ_PP_REPEAT_6_I_, count)(macro, data) -#define IRIS_ZZ_PP_REPEAT_7(count, macro, data) IRIS_PP_CAT(IRIS_ZZ_PP_REPEAT_7_I_, count)(macro, data) -#define IRIS_ZZ_PP_REPEAT_8(count, macro, data) IRIS_PP_CAT(IRIS_ZZ_PP_REPEAT_8_I_, count)(macro, data) #define IRIS_PP_REPEAT_FROM_TO(from, to, macro, data) IRIS_PP_REPEAT(IRIS_PP_SUB(to, from), IRIS_ZZ_PP_REPEAT_FROM_TO_I, (macro, from, data)) -#define IRIS_ZZ_PP_REPEAT_FROM_TO_I_MACRO(state) IRIS_ZZ_PP_REPEAT_FROM_TO_I_MACRO_I state -#define IRIS_ZZ_PP_REPEAT_FROM_TO_I_MACRO_I(macro, from, data) macro - -#define IRIS_ZZ_PP_REPEAT_FROM_TO_I_FROM(state) IRIS_ZZ_PP_REPEAT_FROM_TO_I_FROM_I state -#define IRIS_ZZ_PP_REPEAT_FROM_TO_I_FROM_I(macro, from, data) from - -#define IRIS_ZZ_PP_REPEAT_FROM_TO_I_DATA(state) IRIS_ZZ_PP_REPEAT_FROM_TO_I_DATA_I state -#define IRIS_ZZ_PP_REPEAT_FROM_TO_I_DATA_I(macro, from, data) data - #define IRIS_ZZ_PP_REPEAT_FROM_TO_I(index, state) \ - IRIS_ZZ_PP_REPEAT_FROM_TO_I_MACRO(state)(IRIS_PP_ADD(index, IRIS_ZZ_PP_REPEAT_FROM_TO_I_FROM(state)), IRIS_ZZ_PP_REPEAT_FROM_TO_I_DATA(state)) + IRIS_ZZ_PP_REPEAT_FROM_TO_I_I(index, IRIS_ZZ_PP_REPEAT_FROM_TO_I_MACRO state, IRIS_ZZ_PP_REPEAT_FROM_TO_I_FROM state, IRIS_ZZ_PP_REPEAT_FROM_TO_I_DATA state) +#define IRIS_ZZ_PP_REPEAT_FROM_TO_I_I(index, macro, from, data) macro(IRIS_PP_ADD(index, from), data) + +#define IRIS_ZZ_PP_REPEAT_FROM_TO_I_MACRO(macro, from, data) macro +#define IRIS_ZZ_PP_REPEAT_FROM_TO_I_FROM(macro, from, data) from +#define IRIS_ZZ_PP_REPEAT_FROM_TO_I_DATA(macro, from, data) data #define IRIS_ZZ_PP_REPEAT_1_I_0(macro, data) #define IRIS_ZZ_PP_REPEAT_1_I_1(macro, data) macro(0, data) @@ -183,140 +171,4 @@ #define IRIS_ZZ_PP_REPEAT_4_I_31(macro, data) IRIS_ZZ_PP_REPEAT_4_I_30(macro, data) macro(30, data) #define IRIS_ZZ_PP_REPEAT_4_I_32(macro, data) IRIS_ZZ_PP_REPEAT_4_I_31(macro, data) macro(31, data) -#define IRIS_ZZ_PP_REPEAT_5_I_0(macro, data) -#define IRIS_ZZ_PP_REPEAT_5_I_1(macro, data) macro(0, data) -#define IRIS_ZZ_PP_REPEAT_5_I_2(macro, data) IRIS_ZZ_PP_REPEAT_5_I_1(macro, data) macro(1, data) -#define IRIS_ZZ_PP_REPEAT_5_I_3(macro, data) IRIS_ZZ_PP_REPEAT_5_I_2(macro, data) macro(2, data) -#define IRIS_ZZ_PP_REPEAT_5_I_4(macro, data) IRIS_ZZ_PP_REPEAT_5_I_3(macro, data) macro(3, data) -#define IRIS_ZZ_PP_REPEAT_5_I_5(macro, data) IRIS_ZZ_PP_REPEAT_5_I_4(macro, data) macro(4, data) -#define IRIS_ZZ_PP_REPEAT_5_I_6(macro, data) IRIS_ZZ_PP_REPEAT_5_I_5(macro, data) macro(5, data) -#define IRIS_ZZ_PP_REPEAT_5_I_7(macro, data) IRIS_ZZ_PP_REPEAT_5_I_6(macro, data) macro(6, data) -#define IRIS_ZZ_PP_REPEAT_5_I_8(macro, data) IRIS_ZZ_PP_REPEAT_5_I_7(macro, data) macro(7, data) -#define IRIS_ZZ_PP_REPEAT_5_I_9(macro, data) IRIS_ZZ_PP_REPEAT_5_I_8(macro, data) macro(8, data) -#define IRIS_ZZ_PP_REPEAT_5_I_10(macro, data) IRIS_ZZ_PP_REPEAT_5_I_9(macro, data) macro(9, data) -#define IRIS_ZZ_PP_REPEAT_5_I_11(macro, data) IRIS_ZZ_PP_REPEAT_5_I_10(macro, data) macro(10, data) -#define IRIS_ZZ_PP_REPEAT_5_I_12(macro, data) IRIS_ZZ_PP_REPEAT_5_I_11(macro, data) macro(11, data) -#define IRIS_ZZ_PP_REPEAT_5_I_13(macro, data) IRIS_ZZ_PP_REPEAT_5_I_12(macro, data) macro(12, data) -#define IRIS_ZZ_PP_REPEAT_5_I_14(macro, data) IRIS_ZZ_PP_REPEAT_5_I_13(macro, data) macro(13, data) -#define IRIS_ZZ_PP_REPEAT_5_I_15(macro, data) IRIS_ZZ_PP_REPEAT_5_I_14(macro, data) macro(14, data) -#define IRIS_ZZ_PP_REPEAT_5_I_16(macro, data) IRIS_ZZ_PP_REPEAT_5_I_15(macro, data) macro(15, data) -#define IRIS_ZZ_PP_REPEAT_5_I_17(macro, data) IRIS_ZZ_PP_REPEAT_5_I_16(macro, data) macro(16, data) -#define IRIS_ZZ_PP_REPEAT_5_I_18(macro, data) IRIS_ZZ_PP_REPEAT_5_I_17(macro, data) macro(17, data) -#define IRIS_ZZ_PP_REPEAT_5_I_19(macro, data) IRIS_ZZ_PP_REPEAT_5_I_18(macro, data) macro(18, data) -#define IRIS_ZZ_PP_REPEAT_5_I_20(macro, data) IRIS_ZZ_PP_REPEAT_5_I_19(macro, data) macro(19, data) -#define IRIS_ZZ_PP_REPEAT_5_I_21(macro, data) IRIS_ZZ_PP_REPEAT_5_I_20(macro, data) macro(20, data) -#define IRIS_ZZ_PP_REPEAT_5_I_22(macro, data) IRIS_ZZ_PP_REPEAT_5_I_21(macro, data) macro(21, data) -#define IRIS_ZZ_PP_REPEAT_5_I_23(macro, data) IRIS_ZZ_PP_REPEAT_5_I_22(macro, data) macro(22, data) -#define IRIS_ZZ_PP_REPEAT_5_I_24(macro, data) IRIS_ZZ_PP_REPEAT_5_I_23(macro, data) macro(23, data) -#define IRIS_ZZ_PP_REPEAT_5_I_25(macro, data) IRIS_ZZ_PP_REPEAT_5_I_24(macro, data) macro(24, data) -#define IRIS_ZZ_PP_REPEAT_5_I_26(macro, data) IRIS_ZZ_PP_REPEAT_5_I_25(macro, data) macro(25, data) -#define IRIS_ZZ_PP_REPEAT_5_I_27(macro, data) IRIS_ZZ_PP_REPEAT_5_I_26(macro, data) macro(26, data) -#define IRIS_ZZ_PP_REPEAT_5_I_28(macro, data) IRIS_ZZ_PP_REPEAT_5_I_27(macro, data) macro(27, data) -#define IRIS_ZZ_PP_REPEAT_5_I_29(macro, data) IRIS_ZZ_PP_REPEAT_5_I_28(macro, data) macro(28, data) -#define IRIS_ZZ_PP_REPEAT_5_I_30(macro, data) IRIS_ZZ_PP_REPEAT_5_I_29(macro, data) macro(29, data) -#define IRIS_ZZ_PP_REPEAT_5_I_31(macro, data) IRIS_ZZ_PP_REPEAT_5_I_30(macro, data) macro(30, data) -#define IRIS_ZZ_PP_REPEAT_5_I_32(macro, data) IRIS_ZZ_PP_REPEAT_5_I_31(macro, data) macro(31, data) - -#define IRIS_ZZ_PP_REPEAT_6_I_0(macro, data) -#define IRIS_ZZ_PP_REPEAT_6_I_1(macro, data) macro(0, data) -#define IRIS_ZZ_PP_REPEAT_6_I_2(macro, data) IRIS_ZZ_PP_REPEAT_6_I_1(macro, data) macro(1, data) -#define IRIS_ZZ_PP_REPEAT_6_I_3(macro, data) IRIS_ZZ_PP_REPEAT_6_I_2(macro, data) macro(2, data) -#define IRIS_ZZ_PP_REPEAT_6_I_4(macro, data) IRIS_ZZ_PP_REPEAT_6_I_3(macro, data) macro(3, data) -#define IRIS_ZZ_PP_REPEAT_6_I_5(macro, data) IRIS_ZZ_PP_REPEAT_6_I_4(macro, data) macro(4, data) -#define IRIS_ZZ_PP_REPEAT_6_I_6(macro, data) IRIS_ZZ_PP_REPEAT_6_I_5(macro, data) macro(5, data) -#define IRIS_ZZ_PP_REPEAT_6_I_7(macro, data) IRIS_ZZ_PP_REPEAT_6_I_6(macro, data) macro(6, data) -#define IRIS_ZZ_PP_REPEAT_6_I_8(macro, data) IRIS_ZZ_PP_REPEAT_6_I_7(macro, data) macro(7, data) -#define IRIS_ZZ_PP_REPEAT_6_I_9(macro, data) IRIS_ZZ_PP_REPEAT_6_I_8(macro, data) macro(8, data) -#define IRIS_ZZ_PP_REPEAT_6_I_10(macro, data) IRIS_ZZ_PP_REPEAT_6_I_9(macro, data) macro(9, data) -#define IRIS_ZZ_PP_REPEAT_6_I_11(macro, data) IRIS_ZZ_PP_REPEAT_6_I_10(macro, data) macro(10, data) -#define IRIS_ZZ_PP_REPEAT_6_I_12(macro, data) IRIS_ZZ_PP_REPEAT_6_I_11(macro, data) macro(11, data) -#define IRIS_ZZ_PP_REPEAT_6_I_13(macro, data) IRIS_ZZ_PP_REPEAT_6_I_12(macro, data) macro(12, data) -#define IRIS_ZZ_PP_REPEAT_6_I_14(macro, data) IRIS_ZZ_PP_REPEAT_6_I_13(macro, data) macro(13, data) -#define IRIS_ZZ_PP_REPEAT_6_I_15(macro, data) IRIS_ZZ_PP_REPEAT_6_I_14(macro, data) macro(14, data) -#define IRIS_ZZ_PP_REPEAT_6_I_16(macro, data) IRIS_ZZ_PP_REPEAT_6_I_15(macro, data) macro(15, data) -#define IRIS_ZZ_PP_REPEAT_6_I_17(macro, data) IRIS_ZZ_PP_REPEAT_6_I_16(macro, data) macro(16, data) -#define IRIS_ZZ_PP_REPEAT_6_I_18(macro, data) IRIS_ZZ_PP_REPEAT_6_I_17(macro, data) macro(17, data) -#define IRIS_ZZ_PP_REPEAT_6_I_19(macro, data) IRIS_ZZ_PP_REPEAT_6_I_18(macro, data) macro(18, data) -#define IRIS_ZZ_PP_REPEAT_6_I_20(macro, data) IRIS_ZZ_PP_REPEAT_6_I_19(macro, data) macro(19, data) -#define IRIS_ZZ_PP_REPEAT_6_I_21(macro, data) IRIS_ZZ_PP_REPEAT_6_I_20(macro, data) macro(20, data) -#define IRIS_ZZ_PP_REPEAT_6_I_22(macro, data) IRIS_ZZ_PP_REPEAT_6_I_21(macro, data) macro(21, data) -#define IRIS_ZZ_PP_REPEAT_6_I_23(macro, data) IRIS_ZZ_PP_REPEAT_6_I_22(macro, data) macro(22, data) -#define IRIS_ZZ_PP_REPEAT_6_I_24(macro, data) IRIS_ZZ_PP_REPEAT_6_I_23(macro, data) macro(23, data) -#define IRIS_ZZ_PP_REPEAT_6_I_25(macro, data) IRIS_ZZ_PP_REPEAT_6_I_24(macro, data) macro(24, data) -#define IRIS_ZZ_PP_REPEAT_6_I_26(macro, data) IRIS_ZZ_PP_REPEAT_6_I_25(macro, data) macro(25, data) -#define IRIS_ZZ_PP_REPEAT_6_I_27(macro, data) IRIS_ZZ_PP_REPEAT_6_I_26(macro, data) macro(26, data) -#define IRIS_ZZ_PP_REPEAT_6_I_28(macro, data) IRIS_ZZ_PP_REPEAT_6_I_27(macro, data) macro(27, data) -#define IRIS_ZZ_PP_REPEAT_6_I_29(macro, data) IRIS_ZZ_PP_REPEAT_6_I_28(macro, data) macro(28, data) -#define IRIS_ZZ_PP_REPEAT_6_I_30(macro, data) IRIS_ZZ_PP_REPEAT_6_I_29(macro, data) macro(29, data) -#define IRIS_ZZ_PP_REPEAT_6_I_31(macro, data) IRIS_ZZ_PP_REPEAT_6_I_30(macro, data) macro(30, data) -#define IRIS_ZZ_PP_REPEAT_6_I_32(macro, data) IRIS_ZZ_PP_REPEAT_6_I_31(macro, data) macro(31, data) - -#define IRIS_ZZ_PP_REPEAT_7_I_0(macro, data) -#define IRIS_ZZ_PP_REPEAT_7_I_1(macro, data) macro(0, data) -#define IRIS_ZZ_PP_REPEAT_7_I_2(macro, data) IRIS_ZZ_PP_REPEAT_7_I_1(macro, data) macro(1, data) -#define IRIS_ZZ_PP_REPEAT_7_I_3(macro, data) IRIS_ZZ_PP_REPEAT_7_I_2(macro, data) macro(2, data) -#define IRIS_ZZ_PP_REPEAT_7_I_4(macro, data) IRIS_ZZ_PP_REPEAT_7_I_3(macro, data) macro(3, data) -#define IRIS_ZZ_PP_REPEAT_7_I_5(macro, data) IRIS_ZZ_PP_REPEAT_7_I_4(macro, data) macro(4, data) -#define IRIS_ZZ_PP_REPEAT_7_I_6(macro, data) IRIS_ZZ_PP_REPEAT_7_I_5(macro, data) macro(5, data) -#define IRIS_ZZ_PP_REPEAT_7_I_7(macro, data) IRIS_ZZ_PP_REPEAT_7_I_6(macro, data) macro(6, data) -#define IRIS_ZZ_PP_REPEAT_7_I_8(macro, data) IRIS_ZZ_PP_REPEAT_7_I_7(macro, data) macro(7, data) -#define IRIS_ZZ_PP_REPEAT_7_I_9(macro, data) IRIS_ZZ_PP_REPEAT_7_I_8(macro, data) macro(8, data) -#define IRIS_ZZ_PP_REPEAT_7_I_10(macro, data) IRIS_ZZ_PP_REPEAT_7_I_9(macro, data) macro(9, data) -#define IRIS_ZZ_PP_REPEAT_7_I_11(macro, data) IRIS_ZZ_PP_REPEAT_7_I_10(macro, data) macro(10, data) -#define IRIS_ZZ_PP_REPEAT_7_I_12(macro, data) IRIS_ZZ_PP_REPEAT_7_I_11(macro, data) macro(11, data) -#define IRIS_ZZ_PP_REPEAT_7_I_13(macro, data) IRIS_ZZ_PP_REPEAT_7_I_12(macro, data) macro(12, data) -#define IRIS_ZZ_PP_REPEAT_7_I_14(macro, data) IRIS_ZZ_PP_REPEAT_7_I_13(macro, data) macro(13, data) -#define IRIS_ZZ_PP_REPEAT_7_I_15(macro, data) IRIS_ZZ_PP_REPEAT_7_I_14(macro, data) macro(14, data) -#define IRIS_ZZ_PP_REPEAT_7_I_16(macro, data) IRIS_ZZ_PP_REPEAT_7_I_15(macro, data) macro(15, data) -#define IRIS_ZZ_PP_REPEAT_7_I_17(macro, data) IRIS_ZZ_PP_REPEAT_7_I_16(macro, data) macro(16, data) -#define IRIS_ZZ_PP_REPEAT_7_I_18(macro, data) IRIS_ZZ_PP_REPEAT_7_I_17(macro, data) macro(17, data) -#define IRIS_ZZ_PP_REPEAT_7_I_19(macro, data) IRIS_ZZ_PP_REPEAT_7_I_18(macro, data) macro(18, data) -#define IRIS_ZZ_PP_REPEAT_7_I_20(macro, data) IRIS_ZZ_PP_REPEAT_7_I_19(macro, data) macro(19, data) -#define IRIS_ZZ_PP_REPEAT_7_I_21(macro, data) IRIS_ZZ_PP_REPEAT_7_I_20(macro, data) macro(20, data) -#define IRIS_ZZ_PP_REPEAT_7_I_22(macro, data) IRIS_ZZ_PP_REPEAT_7_I_21(macro, data) macro(21, data) -#define IRIS_ZZ_PP_REPEAT_7_I_23(macro, data) IRIS_ZZ_PP_REPEAT_7_I_22(macro, data) macro(22, data) -#define IRIS_ZZ_PP_REPEAT_7_I_24(macro, data) IRIS_ZZ_PP_REPEAT_7_I_23(macro, data) macro(23, data) -#define IRIS_ZZ_PP_REPEAT_7_I_25(macro, data) IRIS_ZZ_PP_REPEAT_7_I_24(macro, data) macro(24, data) -#define IRIS_ZZ_PP_REPEAT_7_I_26(macro, data) IRIS_ZZ_PP_REPEAT_7_I_25(macro, data) macro(25, data) -#define IRIS_ZZ_PP_REPEAT_7_I_27(macro, data) IRIS_ZZ_PP_REPEAT_7_I_26(macro, data) macro(26, data) -#define IRIS_ZZ_PP_REPEAT_7_I_28(macro, data) IRIS_ZZ_PP_REPEAT_7_I_27(macro, data) macro(27, data) -#define IRIS_ZZ_PP_REPEAT_7_I_29(macro, data) IRIS_ZZ_PP_REPEAT_7_I_28(macro, data) macro(28, data) -#define IRIS_ZZ_PP_REPEAT_7_I_30(macro, data) IRIS_ZZ_PP_REPEAT_7_I_29(macro, data) macro(29, data) -#define IRIS_ZZ_PP_REPEAT_7_I_31(macro, data) IRIS_ZZ_PP_REPEAT_7_I_30(macro, data) macro(30, data) -#define IRIS_ZZ_PP_REPEAT_7_I_32(macro, data) IRIS_ZZ_PP_REPEAT_7_I_31(macro, data) macro(31, data) - -#define IRIS_ZZ_PP_REPEAT_8_I_0(macro, data) -#define IRIS_ZZ_PP_REPEAT_8_I_1(macro, data) macro(0, data) -#define IRIS_ZZ_PP_REPEAT_8_I_2(macro, data) IRIS_ZZ_PP_REPEAT_8_I_1(macro, data) macro(1, data) -#define IRIS_ZZ_PP_REPEAT_8_I_3(macro, data) IRIS_ZZ_PP_REPEAT_8_I_2(macro, data) macro(2, data) -#define IRIS_ZZ_PP_REPEAT_8_I_4(macro, data) IRIS_ZZ_PP_REPEAT_8_I_3(macro, data) macro(3, data) -#define IRIS_ZZ_PP_REPEAT_8_I_5(macro, data) IRIS_ZZ_PP_REPEAT_8_I_4(macro, data) macro(4, data) -#define IRIS_ZZ_PP_REPEAT_8_I_6(macro, data) IRIS_ZZ_PP_REPEAT_8_I_5(macro, data) macro(5, data) -#define IRIS_ZZ_PP_REPEAT_8_I_7(macro, data) IRIS_ZZ_PP_REPEAT_8_I_6(macro, data) macro(6, data) -#define IRIS_ZZ_PP_REPEAT_8_I_8(macro, data) IRIS_ZZ_PP_REPEAT_8_I_7(macro, data) macro(7, data) -#define IRIS_ZZ_PP_REPEAT_8_I_9(macro, data) IRIS_ZZ_PP_REPEAT_8_I_8(macro, data) macro(8, data) -#define IRIS_ZZ_PP_REPEAT_8_I_10(macro, data) IRIS_ZZ_PP_REPEAT_8_I_9(macro, data) macro(9, data) -#define IRIS_ZZ_PP_REPEAT_8_I_11(macro, data) IRIS_ZZ_PP_REPEAT_8_I_10(macro, data) macro(10, data) -#define IRIS_ZZ_PP_REPEAT_8_I_12(macro, data) IRIS_ZZ_PP_REPEAT_8_I_11(macro, data) macro(11, data) -#define IRIS_ZZ_PP_REPEAT_8_I_13(macro, data) IRIS_ZZ_PP_REPEAT_8_I_12(macro, data) macro(12, data) -#define IRIS_ZZ_PP_REPEAT_8_I_14(macro, data) IRIS_ZZ_PP_REPEAT_8_I_13(macro, data) macro(13, data) -#define IRIS_ZZ_PP_REPEAT_8_I_15(macro, data) IRIS_ZZ_PP_REPEAT_8_I_14(macro, data) macro(14, data) -#define IRIS_ZZ_PP_REPEAT_8_I_16(macro, data) IRIS_ZZ_PP_REPEAT_8_I_15(macro, data) macro(15, data) -#define IRIS_ZZ_PP_REPEAT_8_I_17(macro, data) IRIS_ZZ_PP_REPEAT_8_I_16(macro, data) macro(16, data) -#define IRIS_ZZ_PP_REPEAT_8_I_18(macro, data) IRIS_ZZ_PP_REPEAT_8_I_17(macro, data) macro(17, data) -#define IRIS_ZZ_PP_REPEAT_8_I_19(macro, data) IRIS_ZZ_PP_REPEAT_8_I_18(macro, data) macro(18, data) -#define IRIS_ZZ_PP_REPEAT_8_I_20(macro, data) IRIS_ZZ_PP_REPEAT_8_I_19(macro, data) macro(19, data) -#define IRIS_ZZ_PP_REPEAT_8_I_21(macro, data) IRIS_ZZ_PP_REPEAT_8_I_20(macro, data) macro(20, data) -#define IRIS_ZZ_PP_REPEAT_8_I_22(macro, data) IRIS_ZZ_PP_REPEAT_8_I_21(macro, data) macro(21, data) -#define IRIS_ZZ_PP_REPEAT_8_I_23(macro, data) IRIS_ZZ_PP_REPEAT_8_I_22(macro, data) macro(22, data) -#define IRIS_ZZ_PP_REPEAT_8_I_24(macro, data) IRIS_ZZ_PP_REPEAT_8_I_23(macro, data) macro(23, data) -#define IRIS_ZZ_PP_REPEAT_8_I_25(macro, data) IRIS_ZZ_PP_REPEAT_8_I_24(macro, data) macro(24, data) -#define IRIS_ZZ_PP_REPEAT_8_I_26(macro, data) IRIS_ZZ_PP_REPEAT_8_I_25(macro, data) macro(25, data) -#define IRIS_ZZ_PP_REPEAT_8_I_27(macro, data) IRIS_ZZ_PP_REPEAT_8_I_26(macro, data) macro(26, data) -#define IRIS_ZZ_PP_REPEAT_8_I_28(macro, data) IRIS_ZZ_PP_REPEAT_8_I_27(macro, data) macro(27, data) -#define IRIS_ZZ_PP_REPEAT_8_I_29(macro, data) IRIS_ZZ_PP_REPEAT_8_I_28(macro, data) macro(28, data) -#define IRIS_ZZ_PP_REPEAT_8_I_30(macro, data) IRIS_ZZ_PP_REPEAT_8_I_29(macro, data) macro(29, data) -#define IRIS_ZZ_PP_REPEAT_8_I_31(macro, data) IRIS_ZZ_PP_REPEAT_8_I_30(macro, data) macro(30, data) -#define IRIS_ZZ_PP_REPEAT_8_I_32(macro, data) IRIS_ZZ_PP_REPEAT_8_I_31(macro, data) macro(31, data) - #endif diff --git a/include/iris/pp/seq.hpp b/include/iris/pp/seq.hpp index e8cc9ee..e8a9364 100644 --- a/include/iris/pp/seq.hpp +++ b/include/iris/pp/seq.hpp @@ -4,43 +4,23 @@ // SPDX-License-Identifier: MIT #include -#include #include #define IRIS_PP_SEQ_ELEM(index, seq) IRIS_ZZ_PP_SEQ_ELEM_I(IRIS_PP_CAT(IRIS_ZZ_PP_SEQ_ELEM_I_, index) seq) #define IRIS_ZZ_PP_SEQ_ELEM_I(intermediate) IRIS_ZZ_PP_SEQ_ELEM_I_I(intermediate) #define IRIS_ZZ_PP_SEQ_ELEM_I_I(x, _) x -#define IRIS_PP_SEQ_HEAD(seq) IRIS_PP_SEQ_ELEM(0, seq) +#define IRIS_PP_SEQ_HEAD(seq) IRIS_ZZ_PP_SEQ_ELEM_I(IRIS_ZZ_PP_SEQ_ELEM_I_0 seq) #define IRIS_PP_SEQ_TAIL(seq) IRIS_ZZ_PP_SEQ_TAIL_I seq #define IRIS_ZZ_PP_SEQ_TAIL_I(head) #define IRIS_PP_SEQ_SIZE(seq) IRIS_PP_CAT(IRIS_ZZ_PP_SEQ_SIZE_I_, IRIS_ZZ_PP_SEQ_SIZE_I_0 seq) -#define IRIS_PP_SEQ_FOR_EACH(seq, macro, data) \ - IRIS_PP_FOR((seq, macro, data), IRIS_ZZ_PP_SEQ_FOR_EACH_I_PRED, IRIS_ZZ_PP_SEQ_FOR_EACH_I_UPDATE, IRIS_ZZ_PP_SEQ_FOR_EACH_I_EXEC) - -#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_PRED(state) IRIS_ZZ_PP_SEQ_FOR_EACH_I_PRED_I state -#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_PRED_I(seq, macro, data) IRIS_PP_SEQ_SIZE(seq) - -#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_UPDATE(state) IRIS_ZZ_PP_SEQ_FOR_EACH_I_UPDATE_I state -#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_UPDATE_I(seq, macro, data) (IRIS_PP_SEQ_TAIL(seq), macro, data) - -#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_EXEC(state) IRIS_ZZ_PP_SEQ_FOR_EACH_I_EXEC_I state -#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_EXEC_I(seq, macro, data) macro(IRIS_PP_SEQ_HEAD(seq), data) +#define IRIS_PP_SEQ_FOR_EACH(seq, macro, data) IRIS_PP_CAT(IRIS_ZZ_PP_SEQ_FOR_EACH_I_, IRIS_PP_SEQ_SIZE(seq))(macro, data, seq) #define IRIS_PP_SEQ_FOR_EACH_WITH_INDEX(seq, macro, data) \ - IRIS_PP_FOR((0, seq, macro, data), IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_PRED, IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_UPDATE, IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_EXEC) - -#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_PRED(state) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_PRED_I state -#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_PRED_I(index, seq, macro, data) IRIS_PP_SEQ_SIZE(seq) - -#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_UPDATE(state) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_UPDATE_I state -#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_UPDATE_I(index, seq, macro, data) (IRIS_PP_INCREMENT(index), IRIS_PP_SEQ_TAIL(seq), macro, data) - -#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_EXEC(state) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_EXEC_I state -#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_EXEC_I(index, seq, macro, data) macro(index, IRIS_PP_SEQ_HEAD(seq), data) + IRIS_PP_CAT(IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_, IRIS_PP_SEQ_SIZE(seq))(0, macro, data, seq) #define IRIS_ZZ_PP_SEQ_ELEM_I_0(seq) seq, dummy #define IRIS_ZZ_PP_SEQ_ELEM_I_1(seq) IRIS_ZZ_PP_SEQ_ELEM_I_0 @@ -144,4 +124,72 @@ #define IRIS_ZZ_PP_SEQ_SIZE_I_IRIS_ZZ_PP_SEQ_SIZE_I_31 31 #define IRIS_ZZ_PP_SEQ_SIZE_I_IRIS_ZZ_PP_SEQ_SIZE_I_32 32 +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_0(macro, data, seq) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_1(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_2(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_1(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_3(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_2(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_4(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_3(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_5(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_4(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_6(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_5(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_7(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_6(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_8(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_7(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_9(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_8(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_10(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_9(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_11(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_10(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_12(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_11(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_13(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_12(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_14(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_13(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_15(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_14(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_16(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_15(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_17(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_16(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_18(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_17(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_19(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_18(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_20(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_19(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_21(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_20(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_22(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_21(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_23(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_22(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_24(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_23(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_25(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_24(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_26(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_25(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_27(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_26(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_28(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_27(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_29(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_28(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_30(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_29(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_31(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_30(macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_I_32(macro, data, seq) macro(IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_I_31(macro, data, IRIS_PP_SEQ_TAIL(seq)) + +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_0(index, macro, data, seq) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_1(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_2(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_1(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_3(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_2(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_4(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_3(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_5(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_4(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_6(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_5(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_7(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_6(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_8(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_7(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_9(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_8(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_10(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_9(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_11(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_10(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_12(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_11(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_13(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_12(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_14(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_13(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_15(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_14(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_16(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_15(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_17(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_16(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_18(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_17(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_19(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_18(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_20(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_19(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_21(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_20(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_22(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_21(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_23(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_22(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_24(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_23(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_25(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_24(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_26(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_25(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_27(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_26(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_28(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_27(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_29(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_28(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_30(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_29(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_31(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_30(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) +#define IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_32(index, macro, data, seq) macro(index, IRIS_PP_SEQ_HEAD(seq), data) IRIS_ZZ_PP_SEQ_FOR_EACH_WITH_INDEX_I_31(IRIS_PP_INCREMENT(index), macro, data, IRIS_PP_SEQ_TAIL(seq)) + #endif diff --git a/include/iris/pp/sub.hpp b/include/iris/pp/sub.hpp index dc29469..daf202b 100644 --- a/include/iris/pp/sub.hpp +++ b/include/iris/pp/sub.hpp @@ -5,17 +5,41 @@ #include #include -#include -#define IRIS_PP_SUB(a, b) IRIS_ZZ_PP_SUB_I_FIRST(IRIS_PP_WHILE((a, b), IRIS_ZZ_PP_SUB_I_PRED, IRIS_ZZ_PP_SUB_I_UPDATE)) +#define IRIS_PP_SUB(a, b) IRIS_PP_CAT(IRIS_ZZ_PP_SUB_I_, b)(a) -#define IRIS_ZZ_PP_SUB_I_FIRST(state) IRIS_ZZ_PP_SUB_I_FIRST_I state -#define IRIS_ZZ_PP_SUB_I_FIRST_I(a, b) a - -#define IRIS_ZZ_PP_SUB_I_PRED(state) IRIS_ZZ_PP_SUB_I_PRED_I state -#define IRIS_ZZ_PP_SUB_I_PRED_I(a, b) b - -#define IRIS_ZZ_PP_SUB_I_UPDATE(state) IRIS_ZZ_PP_SUB_I_UPDATE_I state -#define IRIS_ZZ_PP_SUB_I_UPDATE_I(a, b) (IRIS_PP_DECREMENT(a), IRIS_PP_DECREMENT(b)) +#define IRIS_ZZ_PP_SUB_I_0(a) a +#define IRIS_ZZ_PP_SUB_I_1(a) IRIS_ZZ_PP_SUB_I_0(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_2(a) IRIS_ZZ_PP_SUB_I_1(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_3(a) IRIS_ZZ_PP_SUB_I_2(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_4(a) IRIS_ZZ_PP_SUB_I_3(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_5(a) IRIS_ZZ_PP_SUB_I_4(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_6(a) IRIS_ZZ_PP_SUB_I_5(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_7(a) IRIS_ZZ_PP_SUB_I_6(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_8(a) IRIS_ZZ_PP_SUB_I_7(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_9(a) IRIS_ZZ_PP_SUB_I_8(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_10(a) IRIS_ZZ_PP_SUB_I_9(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_11(a) IRIS_ZZ_PP_SUB_I_10(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_12(a) IRIS_ZZ_PP_SUB_I_11(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_13(a) IRIS_ZZ_PP_SUB_I_12(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_14(a) IRIS_ZZ_PP_SUB_I_13(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_15(a) IRIS_ZZ_PP_SUB_I_14(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_16(a) IRIS_ZZ_PP_SUB_I_15(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_17(a) IRIS_ZZ_PP_SUB_I_16(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_18(a) IRIS_ZZ_PP_SUB_I_17(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_19(a) IRIS_ZZ_PP_SUB_I_18(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_20(a) IRIS_ZZ_PP_SUB_I_19(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_21(a) IRIS_ZZ_PP_SUB_I_20(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_22(a) IRIS_ZZ_PP_SUB_I_21(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_23(a) IRIS_ZZ_PP_SUB_I_22(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_24(a) IRIS_ZZ_PP_SUB_I_23(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_25(a) IRIS_ZZ_PP_SUB_I_24(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_26(a) IRIS_ZZ_PP_SUB_I_25(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_27(a) IRIS_ZZ_PP_SUB_I_26(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_28(a) IRIS_ZZ_PP_SUB_I_27(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_29(a) IRIS_ZZ_PP_SUB_I_28(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_30(a) IRIS_ZZ_PP_SUB_I_29(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_31(a) IRIS_ZZ_PP_SUB_I_30(IRIS_PP_DECREMENT(a)) +#define IRIS_ZZ_PP_SUB_I_32(a) IRIS_ZZ_PP_SUB_I_31(IRIS_PP_DECREMENT(a)) #endif diff --git a/include/iris/pp/tuple.hpp b/include/iris/pp/tuple.hpp index 38e17b7..f5ef386 100644 --- a/include/iris/pp/tuple.hpp +++ b/include/iris/pp/tuple.hpp @@ -16,1084 +16,43 @@ ) \ size -#define IRIS_PP_TUPLE_ELEM(index, tuple) \ - IRIS_PP_CAT(IRIS_PP_CAT(IRIS_PP_CAT(IRIS_ZZ_PP_TUPLE_ELEM_I_, IRIS_PP_TUPLE_SIZE(tuple)), _), index) \ - tuple +#define IRIS_PP_TUPLE_ELEM(index, tuple) IRIS_PP_CAT(IRIS_ZZ_PP_TUPLE_ELEM_I_, index) tuple #define IRIS_PP_TUPLE_TO_SEQ(tuple) IRIS_PP_CAT(IRIS_ZZ_PP_TUPLE_TO_SEQ_I_, IRIS_PP_TUPLE_SIZE(tuple)) tuple -#define IRIS_ZZ_PP_TUPLE_ELEM_I_1_0(a0) a0 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_0(a0, ...) a0 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_1(a0, a1, ...) a1 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_2(a0, a1, a2, ...) a2 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_3(a0, a1, a2, a3, ...) a3 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_4(a0, a1, a2, a3, a4, ...) a4 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_5(a0, a1, a2, a3, a4, a5, ...) a5 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_6(a0, a1, a2, a3, a4, a5, a6, ...) a6 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_7(a0, a1, a2, a3, a4, a5, a6, a7, ...) a7 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, ...) a8 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, ...) a9 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, ...) a10 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, ...) a11 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, ...) a12 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, ...) a13 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, ...) a14 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, ...) a15 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, ...) a16 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, ...) a17 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_18(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, ...) a18 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_19(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, ...) a19 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_20(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, ...) a20 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_21(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, ...) a21 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_22(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, ...) a22 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_23(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, ...) a23 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_24(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, ...) a24 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_25(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, ...) a25 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_26(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, ...) a26 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_27(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, ...) a27 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_28(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, ...) a28 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_29(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, ...) a29 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_30(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, ...) a30 +#define IRIS_ZZ_PP_TUPLE_ELEM_I_31(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, ...) a31 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_2_0(a0, a1) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_2_1(a0, a1) a1 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_3_0(a0, a1, a2) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_3_1(a0, a1, a2) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_3_2(a0, a1, a2) a2 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_4_0(a0, a1, a2, a3) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_4_1(a0, a1, a2, a3) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_4_2(a0, a1, a2, a3) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_4_3(a0, a1, a2, a3) a3 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_5_0(a0, a1, a2, a3, a4) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_5_1(a0, a1, a2, a3, a4) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_5_2(a0, a1, a2, a3, a4) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_5_3(a0, a1, a2, a3, a4) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_5_4(a0, a1, a2, a3, a4) a4 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_6_0(a0, a1, a2, a3, a4, a5) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_6_1(a0, a1, a2, a3, a4, a5) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_6_2(a0, a1, a2, a3, a4, a5) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_6_3(a0, a1, a2, a3, a4, a5) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_6_4(a0, a1, a2, a3, a4, a5) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_6_5(a0, a1, a2, a3, a4, a5) a5 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_7_0(a0, a1, a2, a3, a4, a5, a6) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_7_1(a0, a1, a2, a3, a4, a5, a6) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_7_2(a0, a1, a2, a3, a4, a5, a6) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_7_3(a0, a1, a2, a3, a4, a5, a6) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_7_4(a0, a1, a2, a3, a4, a5, a6) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_7_5(a0, a1, a2, a3, a4, a5, a6) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_7_6(a0, a1, a2, a3, a4, a5, a6) a6 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_8_0(a0, a1, a2, a3, a4, a5, a6, a7) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_8_1(a0, a1, a2, a3, a4, a5, a6, a7) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_8_2(a0, a1, a2, a3, a4, a5, a6, a7) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_8_3(a0, a1, a2, a3, a4, a5, a6, a7) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_8_4(a0, a1, a2, a3, a4, a5, a6, a7) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_8_5(a0, a1, a2, a3, a4, a5, a6, a7) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_8_6(a0, a1, a2, a3, a4, a5, a6, a7) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_8_7(a0, a1, a2, a3, a4, a5, a6, a7) a7 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_9_0(a0, a1, a2, a3, a4, a5, a6, a7, a8) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_9_1(a0, a1, a2, a3, a4, a5, a6, a7, a8) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_9_2(a0, a1, a2, a3, a4, a5, a6, a7, a8) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_9_3(a0, a1, a2, a3, a4, a5, a6, a7, a8) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_9_4(a0, a1, a2, a3, a4, a5, a6, a7, a8) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_9_5(a0, a1, a2, a3, a4, a5, a6, a7, a8) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_9_6(a0, a1, a2, a3, a4, a5, a6, a7, a8) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_9_7(a0, a1, a2, a3, a4, a5, a6, a7, a8) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_9_8(a0, a1, a2, a3, a4, a5, a6, a7, a8) a8 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_10_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_10_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_10_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_10_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_10_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_10_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_10_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_10_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_10_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_10_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) a9 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_11_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a10 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_12_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) a11 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_13_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) a12 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_14_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) a13 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_15_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) a14 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_16_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) a15 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_17_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) a16 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_18_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) a17 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_19_18(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) a18 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_18(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_20_19(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) a19 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_18(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_19(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_21_20(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) a20 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_18(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_19(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_20(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_22_21(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) a21 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_18(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_19(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_20(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_21(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a21 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_23_22(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) a22 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_18(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_19(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_20(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_21(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a21 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_22(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a22 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_24_23(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) a23 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_18(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_19(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_20(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_21(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a21 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_22(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a22 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_23(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a23 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_25_24(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) a24 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_10(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_11(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_12(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_13(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_14(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_15(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_17(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_18(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_19(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_20(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_21(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a21 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_22(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a22 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_23(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a23 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_24(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a24 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_26_25(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) a25 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_0(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) \ - a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_1(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) \ - a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_2(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) \ - a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_3(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) \ - a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) \ - a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_5(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) \ - a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_6(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) \ - a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_7(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) \ - a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_8(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) \ - a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_9(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) \ - a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_10( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_11( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_12( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_13( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_14( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_15( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_16( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_17( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_18( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_19( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_20( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_21( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a21 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_22( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a22 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_23( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a23 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_24( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a24 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_25( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a25 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_27_26( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26 \ -) \ - a26 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_0( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_1( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_2( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_3( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_4( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_5( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_6( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_7( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_8( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_9( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_10( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_11( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_12( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_13( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_14( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_15( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_16( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_17( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_18( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_19( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_20( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_21( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a21 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_22( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a22 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_23( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a23 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_24( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a24 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_25( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a25 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_26( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a26 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_28_27( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27 \ -) \ - a27 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_0( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_1( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_2( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_3( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_4( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_5( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_6( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_7( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_8( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_9( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_10( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_11( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_12( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_13( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_14( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_15( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_16( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_17( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_18( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_19( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_20( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_21( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a21 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_22( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a22 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_23( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a23 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_24( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a24 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_25( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a25 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_26( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a26 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_27( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a27 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_29_28( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28 \ -) \ - a28 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_0( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_1( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_2( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_3( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_4( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_5( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_6( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_7( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_8( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_9( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_10( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_11( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_12( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_13( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_14( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_15( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_16( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_17( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_18( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_19( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_20( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_21( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a21 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_22( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a22 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_23( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a23 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_24( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a24 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_25( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a25 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_26( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a26 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_27( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a27 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_28( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a28 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_30_29( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29 \ -) \ - a29 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_0( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_1( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_2( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_3( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_4( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_5( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_6( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_7( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_8( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_9( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_10( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_11( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_12( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_13( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_14( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_15( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_16( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_17( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_18( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_19( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_20( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_21( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a21 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_22( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a22 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_23( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a23 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_24( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a24 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_25( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a25 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_26( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a26 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_27( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a27 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_28( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a28 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_29( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a29 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_31_30( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30 \ -) \ - a30 - -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_0( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a0 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_1( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a1 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_2( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a2 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_3( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a3 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_4( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a4 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_5( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a5 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_6( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a6 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_7( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a7 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_8( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a8 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_9( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a9 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_10( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a10 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_11( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a11 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_12( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a12 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_13( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a13 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_14( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a14 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_15( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a15 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_16( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a16 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_17( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a17 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_18( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a18 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_19( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a19 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_20( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a20 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_21( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a21 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_22( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a22 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_23( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a23 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_24( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a24 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_25( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a25 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_26( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a26 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_27( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a27 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_28( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a28 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_29( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a29 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_30( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a30 -#define IRIS_ZZ_PP_TUPLE_ELEM_I_32_31( \ - a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 \ -) \ - a31 - -#define IRIS_ZZ_PP_TUPLE_TO_SEQ_I_0() #define IRIS_ZZ_PP_TUPLE_TO_SEQ_I_1(a0) (a0) #define IRIS_ZZ_PP_TUPLE_TO_SEQ_I_2(a0, a1) (a0)(a1) #define IRIS_ZZ_PP_TUPLE_TO_SEQ_I_3(a0, a1, a2) (a0)(a1)(a2) diff --git a/include/iris/pp/va.hpp b/include/iris/pp/va.hpp new file mode 100644 index 0000000..f1945b2 --- /dev/null +++ b/include/iris/pp/va.hpp @@ -0,0 +1,83 @@ +#ifndef IRIS_ZZ_PREPROCESS_VA_HPP +#define IRIS_ZZ_PREPROCESS_VA_HPP + +// SPDX-License-Identifier: MIT + +#include +#include + +#define IRIS_PP_VA_FOR_EACH(macro, data, ...) \ + IRIS_PP_CAT(IRIS_ZZ_PP_VA_FOR_EACH_I_, IRIS_PP_TUPLE_SIZE((__VA_ARGS__)))(macro, data, __VA_ARGS__) + +#define IRIS_PP_VA_ENUM(macro, data, ...) \ + IRIS_PP_CAT(IRIS_ZZ_PP_VA_ENUM_I_, IRIS_PP_TUPLE_SIZE((__VA_ARGS__)))(macro, data, __VA_ARGS__) + +#define IRIS_ZZ_PP_VA_FOR_EACH_I_0(macro, data, ...) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_1(macro, data, head) macro(head, data) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_2(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_1(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_3(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_2(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_4(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_3(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_5(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_4(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_6(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_5(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_7(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_6(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_8(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_7(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_9(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_8(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_10(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_9(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_11(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_10(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_12(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_11(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_13(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_12(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_14(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_13(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_15(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_14(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_16(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_15(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_17(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_16(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_18(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_17(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_19(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_18(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_20(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_19(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_21(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_20(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_22(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_21(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_23(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_22(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_24(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_23(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_25(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_24(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_26(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_25(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_27(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_26(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_28(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_27(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_29(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_28(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_30(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_29(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_31(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_30(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_FOR_EACH_I_32(macro, data, head, ...) macro(head, data) IRIS_ZZ_PP_VA_FOR_EACH_I_31(macro, data, __VA_ARGS__) + +#define IRIS_ZZ_PP_VA_ENUM_I_0(macro, data, ...) +#define IRIS_ZZ_PP_VA_ENUM_I_1(macro, data, head) macro(head, data) +#define IRIS_ZZ_PP_VA_ENUM_I_2(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_1(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_3(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_2(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_4(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_3(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_5(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_4(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_6(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_5(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_7(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_6(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_8(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_7(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_9(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_8(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_10(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_9(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_11(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_10(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_12(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_11(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_13(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_12(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_14(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_13(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_15(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_14(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_16(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_15(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_17(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_16(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_18(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_17(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_19(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_18(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_20(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_19(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_21(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_20(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_22(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_21(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_23(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_22(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_24(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_23(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_25(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_24(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_26(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_25(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_27(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_26(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_28(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_27(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_29(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_28(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_30(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_29(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_31(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_30(macro, data, __VA_ARGS__) +#define IRIS_ZZ_PP_VA_ENUM_I_32(macro, data, head, ...) macro(head, data), IRIS_ZZ_PP_VA_ENUM_I_31(macro, data, __VA_ARGS__) + +#endif diff --git a/include/iris/pp/while.hpp b/include/iris/pp/while.hpp index 10fefe7..a6e1324 100644 --- a/include/iris/pp/while.hpp +++ b/include/iris/pp/while.hpp @@ -7,72 +7,39 @@ #define IRIS_PP_WHILE(state, pred, update) IRIS_ZZ_PP_WHILE_I_0(state, pred, update) -#define IRIS_ZZ_PP_WHILE_I_0(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_0(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_1(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_1(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_2(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_2(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_3(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_3(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_4(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_4(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_5(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_5(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_6(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_6(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_7(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_7(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_8(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_8(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_9(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_9(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_10(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_10(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_11(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_11(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_12(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_12(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_13(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_13(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_14(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_14(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_15(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_15(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_16(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_16(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_17(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_17(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_18(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_18(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_19(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_19(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_20(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_20(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_21(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_21(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_22(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_22(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_23(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_23(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_24(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_24(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_25(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_25(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_26(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_26(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_27(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_27(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_28(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_28(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_29(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_29(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_30(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_30(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_31(state, pred, op) IRIS_ZZ_PP_WHILE_I_I_31(state, pred, op) - #define IRIS_ZZ_PP_WHILE_I_EAT_3(state, pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_0(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_1, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_1(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_2, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_2(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_3, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_3(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_4, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_4(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_5, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_5(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_6, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_6(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_7, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_7(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_8, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_8(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_9, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_9(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_10, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_10(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_11, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_11(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_12, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_12(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_13, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_13(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_14, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_14(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_15, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_15(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_16, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_16(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_17, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_17(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_18, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_18(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_19, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_19(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_20, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_20(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_21, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_21(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_22, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_22(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_23, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_23(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_24, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_24(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_25, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_25(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_26, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_26(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_27, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_27(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_28, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_28(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_29, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_29(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_30, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_30(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_31, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) -#define IRIS_ZZ_PP_WHILE_I_I_31(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_32, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_0(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_1, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_1(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_2, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_2(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_3, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_3(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_4, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_4(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_5, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_5(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_6, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_6(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_7, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_7(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_8, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_8(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_9, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_9(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_10, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_10(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_11, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_11(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_12, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_12(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_13, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_13(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_14, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_14(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_15, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_15(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_16, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_16(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_17, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_17(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_18, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_18(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_19, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_19(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_20, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_20(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_21, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_21(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_22, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_22(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_23, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_23(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_24, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_24(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_25, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_25(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_26, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_26(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_27, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_27(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_28, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_28(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_29, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_29(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_30, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_30(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_31, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) +#define IRIS_ZZ_PP_WHILE_I_31(state, pred, op) IRIS_PP_IF(pred(state), IRIS_ZZ_PP_WHILE_I_32, state IRIS_ZZ_PP_WHILE_I_EAT_3)(op(state), pred, op) #endif diff --git a/scripts/gen_repeat.py b/scripts/gen_repeat.py index de60640..c9486b2 100644 --- a/scripts/gen_repeat.py +++ b/scripts/gen_repeat.py @@ -1,10 +1,10 @@ # SPDX-License-Identifier: MIT -for i in range(1, 8 + 1): - print(f"#define IRIS_PP_REPEAT_{i}_I_0(macro, data)") - print(f"#define IRIS_PP_REPEAT_{i}_I_1(macro, data) macro(0, data)") +for i in range(1, 4 + 1): + print(f"#define IRIS_ZZ_PP_REPEAT_{i}_I_0(macro, data)") + print(f"#define IRIS_ZZ_PP_REPEAT_{i}_I_1(macro, data) macro(0, data)") for j in range(1, 32): print( - f"#define IRIS_PP_REPEAT_{i}_I_{j + 1}(macro, data) IRIS_PP_REPEAT_{i}_I_{j}(macro, data) macro({j}, data)" + f"#define IRIS_ZZ_PP_REPEAT_{i}_I_{j + 1}(macro, data) IRIS_ZZ_PP_REPEAT_{i}_I_{j}(macro, data) macro({j}, data)" ) print() diff --git a/scripts/gen_tuple.py b/scripts/gen_tuple.py index b7a7801..7037f33 100644 --- a/scripts/gen_tuple.py +++ b/scripts/gen_tuple.py @@ -1,12 +1,11 @@ # SPDX-License-Identifier: MIT -for i in range(1, 32 + 1): - params = ", ".join(f"a{j}" for j in range(0, i)) - for j in range(0, i): - print(f"#define IRIS_PP_TUPLE_ELEM_I_{i}_{j}({params}) a{j}") - print() +for i in range(0, 32): + params = ", ".join(f"a{j}" for j in range(0, i + 1)) + print(f"#define IRIS_ZZ_PP_TUPLE_ELEM_I_{i}({params}, ...) a{i}") +print() for i in range(1, 32 + 1): print( - f"#define IRIS_PP_TUPLE_TO_SEQ_I_{i}({', '.join(f'a{j}' for j in range(0, i))}) {''.join(f'(a{j})' for j in range(0, i))}" + f"#define IRIS_ZZ_PP_TUPLE_TO_SEQ_I_{i}({', '.join(f'a{j}' for j in range(0, i))}) {''.join(f'(a{j})' for j in range(0, i))}" ) diff --git a/test/library_config.cpp b/test/library_config.cpp index 3b4dbd4..5fb972b 100644 --- a/test/library_config.cpp +++ b/test/library_config.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include diff --git a/test/preprocess.cpp b/test/preprocess.cpp index b779449..330a857 100644 --- a/test/preprocess.cpp +++ b/test/preprocess.cpp @@ -9,14 +9,19 @@ #include #include #include +#include #include #include #include #include #include +#include +#include #include +#include + using namespace std::string_view_literals; #define IRIS_TEST_REPEAT_INNER(j, i) constexpr int IRIS_PP_CAT(IRIS_PP_CAT(IRIS_PP_CAT(baz_, i), _), j) = i * 10 + j; @@ -24,6 +29,10 @@ using namespace std::string_view_literals; #define IRIS_TEST_REPEAT_DECLARE_VAR(index, name) constexpr int IRIS_PP_CAT(name, index) = index; +#define IRIS_TEST_REPEAT_LEVEL_3(k, ij) constexpr int IRIS_PP_CAT(IRIS_PP_CAT(qux_, ij), k) = 1; +#define IRIS_TEST_REPEAT_LEVEL_2(j, i) IRIS_PP_REPEAT(1, IRIS_TEST_REPEAT_LEVEL_3, IRIS_PP_CAT(IRIS_PP_CAT(i, _), j)) +#define IRIS_TEST_REPEAT_LEVEL_1(i, d) IRIS_PP_REPEAT(1, IRIS_TEST_REPEAT_LEVEL_2, i) + TEST_CASE("repeat", "[preprocess]") { IRIS_PP_REPEAT(5, IRIS_TEST_REPEAT_DECLARE_VAR, foo) @@ -41,6 +50,10 @@ TEST_CASE("repeat", "[preprocess]") STATIC_CHECK(baz_1_0 == 10); STATIC_CHECK(baz_2_0 == 20); STATIC_CHECK(baz_2_1 == 21); + + IRIS_PP_REPEAT_FROM_TO(1, 3, IRIS_TEST_REPEAT_LEVEL_1, data) + STATIC_CHECK(qux_1_00 == 1); + STATIC_CHECK(qux_2_00 == 1); } TEST_CASE("tuple", "[preprocess]") @@ -54,6 +67,11 @@ TEST_CASE("tuple", "[preprocess]") STATIC_CHECK(IRIS_PP_STRINGIZE(IRIS_PP_TUPLE_ELEM(0, (a, b, c))) == "a"sv); STATIC_CHECK(IRIS_PP_STRINGIZE(IRIS_PP_TUPLE_ELEM(1, (a, b, c))) == "b"sv); STATIC_CHECK(IRIS_PP_STRINGIZE(IRIS_PP_TUPLE_ELEM(2, (a, b, c))) == "c"sv); + STATIC_CHECK(IRIS_PP_STRINGIZE(IRIS_PP_TUPLE_ELEM(1, (a, (b, c), d))) == "(b, c)"sv); + STATIC_CHECK(IRIS_PP_STRINGIZE(IRIS_PP_TUPLE_ELEM(31, ( + a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, + a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31 + ))) == "a31"sv); } STATIC_CHECK(IRIS_PP_STRINGIZE(IRIS_PP_TUPLE_TO_SEQ((a, b))) == "(a)(b)"sv); @@ -105,6 +123,8 @@ TEST_CASE("for", "[preprocess]") #define IRIS_TEST_SEQ_EXEC(elem, data) constexpr std::string_view IRIS_PP_CAT(data, elem) = IRIS_PP_STRINGIZE(elem); #define IRIS_TEST_SEQ_EXEC2(index, elem, data) constexpr int IRIS_PP_CAT(data, elem) = index; +#define IRIS_TEST_SEQ_EXEC_WHILE(elem, data) constexpr int IRIS_PP_CAT(data, elem) = IRIS_PP_WHILE(0, IRIS_TEST_WHILE_NEQ_5, IRIS_PP_INCREMENT); +#define IRIS_TEST_WHILE_NEQ_5(expr) IRIS_PP_NOT_EQUAL(expr, 5) TEST_CASE("seq", "[preprocess]") { @@ -131,9 +151,52 @@ TEST_CASE("seq", "[preprocess]") STATIC_CHECK(bara == 0); STATIC_CHECK(barb == 1); STATIC_CHECK(barc == 2); + + IRIS_PP_SEQ_FOR_EACH(, IRIS_TEST_SEQ_EXEC, unused) + IRIS_PP_SEQ_FOR_EACH_WITH_INDEX(, IRIS_TEST_SEQ_EXEC2, unused) + + IRIS_PP_SEQ_FOR_EACH((a)(b), IRIS_TEST_SEQ_EXEC_WHILE, baz) + STATIC_CHECK(baza == 5); + STATIC_CHECK(bazb == 5); } -#define IRIS_TEST_WHILE_NEQ_5(expr) IRIS_PP_NOT_EQUAL(expr, 5) +#define IRIS_TEST_VA_EXEC(elem, data) constexpr int IRIS_PP_CAT(data, elem) = 1; +#define IRIS_TEST_VA_ENUM(elem, data) data + elem + +TEST_CASE("va", "[preprocess]") +{ + IRIS_PP_VA_FOR_EACH(IRIS_TEST_VA_EXEC, foo, a, b, c) + STATIC_CHECK(fooa == 1); + STATIC_CHECK(foob == 1); + STATIC_CHECK(fooc == 1); + + IRIS_PP_VA_FOR_EACH(IRIS_TEST_VA_EXEC, unused) + + constexpr int arr[]{IRIS_PP_VA_ENUM(IRIS_TEST_VA_ENUM, 10, 1, 2, 3)}; + STATIC_CHECK(std::size(arr) == 3); + STATIC_CHECK(arr[0] == 11); + STATIC_CHECK(arr[1] == 12); + STATIC_CHECK(arr[2] == 13); + + STATIC_CHECK(IRIS_PP_STRINGIZE(IRIS_PP_VA_ENUM(IRIS_TEST_VA_ENUM, x)) == ""sv); + STATIC_CHECK(IRIS_PP_STRINGIZE(IRIS_PP_VA_ENUM(IRIS_TEST_VA_ENUM, x, (a, b))) == "x + (a, b)"sv); +} + +#define IRIS_TEST_REC_AVAILABLE_FROM_1(n) IRIS_PP_SUB(n, 0) +#define IRIS_TEST_REC_AVAILABLE_FROM_5(n) IRIS_PP_SUB(n, 4) +#define IRIS_TEST_REC_AVAILABLE_FROM_7(n) IRIS_PP_SUB(n, 6) +#define IRIS_TEST_REC_AVAILABLE_FROM_8(n) IRIS_PP_SUB(n, 7) + +TEST_CASE("rec", "[preprocess]") +{ + STATIC_CHECK(IRIS_PP_REC(IRIS_TEST_REC_AVAILABLE_FROM_1, 8) == 1); + STATIC_CHECK(IRIS_PP_REC(IRIS_TEST_REC_AVAILABLE_FROM_5, 8) == 5); + STATIC_CHECK(IRIS_PP_REC(IRIS_TEST_REC_AVAILABLE_FROM_7, 8) == 7); + STATIC_CHECK(IRIS_PP_REC(IRIS_TEST_REC_AVAILABLE_FROM_8, 8) == 8); + + STATIC_CHECK(IRIS_PP_REC(IRIS_TEST_REC_AVAILABLE_FROM_1, 4) == 1); + STATIC_CHECK(IRIS_PP_REC(IRIS_TEST_REC_AVAILABLE_FROM_5, 4) == 4); +} TEST_CASE("while", "[preprocess]") { @@ -148,6 +211,8 @@ TEST_CASE("add", "[preprocess]") STATIC_CHECK(IRIS_PP_ADD(1, 1) == 2); STATIC_CHECK(IRIS_PP_ADD(3, 2) == 5); + STATIC_CHECK(IRIS_PP_ADD(16, 16) == 32); + STATIC_CHECK(IRIS_PP_ADD(30, 5) == 32); } TEST_CASE("sub", "[preprocess]") @@ -157,6 +222,8 @@ TEST_CASE("sub", "[preprocess]") STATIC_CHECK(IRIS_PP_SUB(1, 1) == 0); STATIC_CHECK(IRIS_PP_SUB(3, 2) == 1); + STATIC_CHECK(IRIS_PP_SUB(32, 31) == 1); + STATIC_CHECK(IRIS_PP_SUB(2, 5) == 0); } #define IRIS_TEST_COMMA_IF(index, data) IRIS_PP_COMMA_IF(index) index