From 9a1a0ebec3b7b727d00bd3a7932c807af2e2c8eb Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Thu, 21 Sep 2017 22:19:05 +0200 Subject: [PATCH] Increase M_INC & M_DEC & M_NOTEQUAL & M_RET_ARGn to 52 Add M_SKIP, M_KEEP & M_MID macros. Define M_RET_ARG Rewrite M_SEQ using M_MID Rewrite M_ADD & M_SUB avoiding recursivity (much faster). --- m-core.h | 901 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 487 insertions(+), 414 deletions(-) diff --git a/m-core.h b/m-core.h index 88081221..b4d23c0f 100644 --- a/m-core.h +++ b/m-core.h @@ -83,7 +83,10 @@ #define M_C4I(a, b, c, ...) a ## b ## c ## __VA_ARGS__ #define M_C4(a, b, c, ...) M_C4I(a ,b, c, __VA_ARGS__) -/* Increment the number given as argument (from [0..29[) */ +/* Increment the number given as argument (from [0..52[) + Generated by: + for i in $(seq 0 52) ; do printf "#define M_INC_%d %d\n" $i $(($i + 1)) ; done + */ #define M_INC(x) M_C(M_INC_, x) #define M_INC_0 1 #define M_INC_1 2 @@ -114,9 +117,36 @@ #define M_INC_26 27 #define M_INC_27 28 #define M_INC_28 29 -#define M_INC_29 OVERFLOW +#define M_INC_29 30 +#define M_INC_30 31 +#define M_INC_31 32 +#define M_INC_32 33 +#define M_INC_33 34 +#define M_INC_34 35 +#define M_INC_35 36 +#define M_INC_36 37 +#define M_INC_37 38 +#define M_INC_38 39 +#define M_INC_39 40 +#define M_INC_40 41 +#define M_INC_41 42 +#define M_INC_42 43 +#define M_INC_43 44 +#define M_INC_44 45 +#define M_INC_45 46 +#define M_INC_46 47 +#define M_INC_47 48 +#define M_INC_48 49 +#define M_INC_49 50 +#define M_INC_50 51 +#define M_INC_51 52 +#define M_INC_52 53 +#define M_INC_53 OVERFLOW -/* Decrement the number given in argument (from [0..29[) */ +/* Decrement the number given in argument (from [0..52[) + Generated by: + for i in $(seq 1 52) ; do printf "#define M_DEC_%d %d\n" $i $(($i - 1)) ; done +*/ #define M_DEC(x) M_C(M_DEC_, x) #define M_DEC_0 overflow #define M_DEC_1 0 @@ -148,28 +178,441 @@ #define M_DEC_27 26 #define M_DEC_28 27 #define M_DEC_29 28 +#define M_DEC_30 29 +#define M_DEC_31 30 +#define M_DEC_32 31 +#define M_DEC_33 32 +#define M_DEC_34 33 +#define M_DEC_35 34 +#define M_DEC_36 35 +#define M_DEC_37 36 +#define M_DEC_38 37 +#define M_DEC_39 38 +#define M_DEC_40 39 +#define M_DEC_41 40 +#define M_DEC_42 41 +#define M_DEC_43 42 +#define M_DEC_44 43 +#define M_DEC_45 44 +#define M_DEC_46 45 +#define M_DEC_47 46 +#define M_DEC_48 47 +#define M_DEC_49 48 +#define M_DEC_50 49 +#define M_DEC_51 50 +#define M_DEC_52 51 -/* Return the nth argument: - M_RET_ARG1 - M_RET_ARG2 - M_RET_ARG3 - M_RET_ARG27 - M_RET_ARG53 +/* Add two integers. + Generated by: + for i in $(seq 0 52) ; do printf "#define M_ADDI_%d(n) " $i ; for j in $(seq 1 $i) ; do printf "M_INC(";done ; printf "n" ; for j in $(seq 1 $i) ; do printf ")" ;done ; printf "\n" ; done */ +#define M_ADDI(f, n) f(n) +#define M_ADD(x,y) M_ADDI(M_C(M_ADDI_, y), x) +#define M_ADDI_0(n) n +#define M_ADDI_1(n) M_INC(n) +#define M_ADDI_2(n) M_INC(M_INC(n)) +#define M_ADDI_3(n) M_INC(M_INC(M_INC(n))) +#define M_ADDI_4(n) M_INC(M_INC(M_INC(M_INC(n)))) +#define M_ADDI_5(n) M_INC(M_INC(M_INC(M_INC(M_INC(n))))) +#define M_ADDI_6(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))) +#define M_ADDI_7(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))) +#define M_ADDI_8(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))) +#define M_ADDI_9(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))) +#define M_ADDI_10(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))) +#define M_ADDI_11(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))) +#define M_ADDI_12(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))) +#define M_ADDI_13(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))) +#define M_ADDI_14(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))) +#define M_ADDI_15(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))) +#define M_ADDI_16(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))) +#define M_ADDI_17(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))) +#define M_ADDI_18(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))) +#define M_ADDI_19(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))) +#define M_ADDI_20(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))) +#define M_ADDI_21(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))) +#define M_ADDI_22(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))) +#define M_ADDI_23(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))) +#define M_ADDI_24(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))) +#define M_ADDI_25(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))) +#define M_ADDI_26(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))) +#define M_ADDI_27(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))) +#define M_ADDI_28(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))) +#define M_ADDI_29(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))) +#define M_ADDI_30(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))) +#define M_ADDI_31(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))) +#define M_ADDI_32(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))) +#define M_ADDI_33(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))))) +#define M_ADDI_34(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))))) +#define M_ADDI_35(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))))))) +#define M_ADDI_36(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))))))) +#define M_ADDI_37(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))))))))) +#define M_ADDI_38(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))))))))) +#define M_ADDI_39(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_40(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_41(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_42(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_43(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_44(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_45(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_46(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_47(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_48(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_49(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_50(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_51(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n))))))))))))))))))))))))))))))))))))))))))))))))))) +#define M_ADDI_52(n) M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(M_INC(n)))))))))))))))))))))))))))))))))))))))))))))))))))) + +/* Substract two integers. + Generated by: + for i in $(seq 0 52) ; do printf "#define M_SUBI_%d(n) " $i ; for j in $(seq 1 $i) ; do printf "M_DEC(";done ; printf "n" ; for j in $(seq 1 $i) ; do printf ")" ;done ; printf "\n" ; done */ +#define M_SUBI(f, n) f(n) +#define M_SUB(x,y) M_SUBI(M_C(M_SUBI_, y), x) +#define M_SUBI_0(n) n +#define M_SUBI_1(n) M_DEC(n) +#define M_SUBI_2(n) M_DEC(M_DEC(n)) +#define M_SUBI_3(n) M_DEC(M_DEC(M_DEC(n))) +#define M_SUBI_4(n) M_DEC(M_DEC(M_DEC(M_DEC(n)))) +#define M_SUBI_5(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))) +#define M_SUBI_6(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))) +#define M_SUBI_7(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))) +#define M_SUBI_8(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))) +#define M_SUBI_9(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))) +#define M_SUBI_10(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))) +#define M_SUBI_11(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))) +#define M_SUBI_12(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))) +#define M_SUBI_13(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))) +#define M_SUBI_14(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))) +#define M_SUBI_15(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))) +#define M_SUBI_16(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))) +#define M_SUBI_17(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))) +#define M_SUBI_18(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))) +#define M_SUBI_19(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))) +#define M_SUBI_20(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))) +#define M_SUBI_21(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))) +#define M_SUBI_22(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))) +#define M_SUBI_23(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))) +#define M_SUBI_24(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))) +#define M_SUBI_25(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))) +#define M_SUBI_26(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))) +#define M_SUBI_27(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))) +#define M_SUBI_28(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))) +#define M_SUBI_29(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))) +#define M_SUBI_30(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))) +#define M_SUBI_31(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))) +#define M_SUBI_32(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))) +#define M_SUBI_33(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))))) +#define M_SUBI_34(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))))) +#define M_SUBI_35(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))))))) +#define M_SUBI_36(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))))))) +#define M_SUBI_37(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))))))))) +#define M_SUBI_38(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))))))))) +#define M_SUBI_39(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_40(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_41(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_42(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_43(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_44(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_45(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_46(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_47(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_48(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_49(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_50(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_51(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n))))))))))))))))))))))))))))))))))))))))))))))))))) +#define M_SUBI_52(n) M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(M_DEC(n)))))))))))))))))))))))))))))))))))))))))))))))))))) + +/* Return the nth argument. + Generated by: + for i in $(seq 1 53 ) ; do printf "#define M_RETI_ARG%d(" $i; for j in $(seq 1 $i) ; do printf "_%d, " $j ; done ; printf "...) _%d\n#define M_RET_ARG%d(...) M_RETI_ARG%d(__VA_ARGS__)\n\n" $i $i $i ; done + */ +#define M_RETI_ARG(f, ...) f(__VA_ARGS__) +#define M_RET_ARG(n, ...) M_RETI_ARG(M_C(M_RET_ARG, n), __VA_ARGS__) + +#define M_RETI_ARG1(_1, ...) _1 +#define M_RET_ARG1(...) M_RETI_ARG1(__VA_ARGS__) + +#define M_RETI_ARG2(_1, _2, ...) _2 +#define M_RET_ARG2(...) M_RETI_ARG2(__VA_ARGS__) + +#define M_RETI_ARG3(_1, _2, _3, ...) _3 +#define M_RET_ARG3(...) M_RETI_ARG3(__VA_ARGS__) + +#define M_RETI_ARG4(_1, _2, _3, _4, ...) _4 +#define M_RET_ARG4(...) M_RETI_ARG4(__VA_ARGS__) + +#define M_RETI_ARG5(_1, _2, _3, _4, _5, ...) _5 +#define M_RET_ARG5(...) M_RETI_ARG5(__VA_ARGS__) + +#define M_RETI_ARG6(_1, _2, _3, _4, _5, _6, ...) _6 +#define M_RET_ARG6(...) M_RETI_ARG6(__VA_ARGS__) + +#define M_RETI_ARG7(_1, _2, _3, _4, _5, _6, _7, ...) _7 +#define M_RET_ARG7(...) M_RETI_ARG7(__VA_ARGS__) + +#define M_RETI_ARG8(_1, _2, _3, _4, _5, _6, _7, _8, ...) _8 +#define M_RET_ARG8(...) M_RETI_ARG8(__VA_ARGS__) + +#define M_RETI_ARG9(_1, _2, _3, _4, _5, _6, _7, _8, _9, ...) _9 +#define M_RET_ARG9(...) M_RETI_ARG9(__VA_ARGS__) + +#define M_RETI_ARG10(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) _10 +#define M_RET_ARG10(...) M_RETI_ARG10(__VA_ARGS__) + +#define M_RETI_ARG11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) _11 +#define M_RET_ARG11(...) M_RETI_ARG11(__VA_ARGS__) + +#define M_RETI_ARG12(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) _12 +#define M_RET_ARG12(...) M_RETI_ARG12(__VA_ARGS__) + +#define M_RETI_ARG13(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) _13 +#define M_RET_ARG13(...) M_RETI_ARG13(__VA_ARGS__) + +#define M_RETI_ARG14(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) _14 +#define M_RET_ARG14(...) M_RETI_ARG14(__VA_ARGS__) + +#define M_RETI_ARG15(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) _15 +#define M_RET_ARG15(...) M_RETI_ARG15(__VA_ARGS__) + +#define M_RETI_ARG16(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) _16 +#define M_RET_ARG16(...) M_RETI_ARG16(__VA_ARGS__) + +#define M_RETI_ARG17(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) _17 +#define M_RET_ARG17(...) M_RETI_ARG17(__VA_ARGS__) + +#define M_RETI_ARG18(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) _18 +#define M_RET_ARG18(...) M_RETI_ARG18(__VA_ARGS__) + +#define M_RETI_ARG19(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) _19 +#define M_RET_ARG19(...) M_RETI_ARG19(__VA_ARGS__) + +#define M_RETI_ARG20(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, ...) _20 +#define M_RET_ARG20(...) M_RETI_ARG20(__VA_ARGS__) + +#define M_RETI_ARG21(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, ...) _21 +#define M_RET_ARG21(...) M_RETI_ARG21(__VA_ARGS__) + +#define M_RETI_ARG22(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, ...) _22 +#define M_RET_ARG22(...) M_RETI_ARG22(__VA_ARGS__) + +#define M_RETI_ARG23(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, ...) _23 +#define M_RET_ARG23(...) M_RETI_ARG23(__VA_ARGS__) + +#define M_RETI_ARG24(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, ...) _24 +#define M_RET_ARG24(...) M_RETI_ARG24(__VA_ARGS__) + +#define M_RETI_ARG25(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, ...) _25 +#define M_RET_ARG25(...) M_RETI_ARG25(__VA_ARGS__) + +#define M_RETI_ARG26(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, ...) _26 +#define M_RET_ARG26(...) M_RETI_ARG26(__VA_ARGS__) + +#define M_RETI_ARG27(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, ...) _27 +#define M_RET_ARG27(...) M_RETI_ARG27(__VA_ARGS__) + +#define M_RETI_ARG28(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, ...) _28 +#define M_RET_ARG28(...) M_RETI_ARG28(__VA_ARGS__) + +#define M_RETI_ARG29(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, ...) _29 +#define M_RET_ARG29(...) M_RETI_ARG29(__VA_ARGS__) + +#define M_RETI_ARG30(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, ...) _30 +#define M_RET_ARG30(...) M_RETI_ARG30(__VA_ARGS__) + +#define M_RETI_ARG31(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, ...) _31 +#define M_RET_ARG31(...) M_RETI_ARG31(__VA_ARGS__) + +#define M_RETI_ARG32(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, ...) _32 +#define M_RET_ARG32(...) M_RETI_ARG32(__VA_ARGS__) + +#define M_RETI_ARG33(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, ...) _33 +#define M_RET_ARG33(...) M_RETI_ARG33(__VA_ARGS__) + +#define M_RETI_ARG34(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, ...) _34 +#define M_RET_ARG34(...) M_RETI_ARG34(__VA_ARGS__) + +#define M_RETI_ARG35(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, ...) _35 +#define M_RET_ARG35(...) M_RETI_ARG35(__VA_ARGS__) + +#define M_RETI_ARG36(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, ...) _36 +#define M_RET_ARG36(...) M_RETI_ARG36(__VA_ARGS__) + +#define M_RETI_ARG37(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, ...) _37 +#define M_RET_ARG37(...) M_RETI_ARG37(__VA_ARGS__) + +#define M_RETI_ARG38(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, ...) _38 +#define M_RET_ARG38(...) M_RETI_ARG38(__VA_ARGS__) + +#define M_RETI_ARG39(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, ...) _39 +#define M_RET_ARG39(...) M_RETI_ARG39(__VA_ARGS__) + +#define M_RETI_ARG40(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, ...) _40 +#define M_RET_ARG40(...) M_RETI_ARG40(__VA_ARGS__) + +#define M_RETI_ARG41(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, ...) _41 +#define M_RET_ARG41(...) M_RETI_ARG41(__VA_ARGS__) + +#define M_RETI_ARG42(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, ...) _42 +#define M_RET_ARG42(...) M_RETI_ARG42(__VA_ARGS__) + +#define M_RETI_ARG43(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, ...) _43 +#define M_RET_ARG43(...) M_RETI_ARG43(__VA_ARGS__) + +#define M_RETI_ARG44(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, ...) _44 +#define M_RET_ARG44(...) M_RETI_ARG44(__VA_ARGS__) + +#define M_RETI_ARG45(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, ...) _45 +#define M_RET_ARG45(...) M_RETI_ARG45(__VA_ARGS__) + +#define M_RETI_ARG46(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, ...) _46 +#define M_RET_ARG46(...) M_RETI_ARG46(__VA_ARGS__) + +#define M_RETI_ARG47(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, ...) _47 +#define M_RET_ARG47(...) M_RETI_ARG47(__VA_ARGS__) + +#define M_RETI_ARG48(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, ...) _48 +#define M_RET_ARG48(...) M_RETI_ARG48(__VA_ARGS__) + +#define M_RETI_ARG49(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, ...) _49 +#define M_RET_ARG49(...) M_RETI_ARG49(__VA_ARGS__) + +#define M_RETI_ARG50(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, ...) _50 +#define M_RET_ARG50(...) M_RETI_ARG50(__VA_ARGS__) + +#define M_RETI_ARG51(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, ...) _51 +#define M_RET_ARG51(...) M_RETI_ARG51(__VA_ARGS__) + +#define M_RETI_ARG52(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, ...) _52 +#define M_RET_ARG52(...) M_RETI_ARG52(__VA_ARGS__) + +#define M_RETI_ARG53(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, ...) _53 +#define M_RET_ARG53(...) M_RETI_ARG53(__VA_ARGS__) + + +/* Skip the Nth first arguments + Generated by: + for i in $(seq 0 52) ; do printf "#define M_SKIPI_%d(" $i ; for j in $(seq 1 $i) ; do printf "_%d, " $j ; done ; printf "...) __VA_ARGS__\n"; done */ -#define M_RETI_ARG1(a, ...) a -#define M_RET_ARG1(...) M_RETI_ARG1(__VA_ARGS__) +#define M_SKIPI(f, ...) f(__VA_ARGS__) +#define M_SKIP(n, ...) M_SKIPI(M_C(M_SKIPI_, n), __VA_ARGS__) -#define M_RETI_ARG2(a, b, ...) b -#define M_RET_ARG2(...) M_RETI_ARG2(__VA_ARGS__) +#define M_SKIPI_0(...) __VA_ARGS__ +#define M_SKIPI_1(_1, ...) __VA_ARGS__ +#define M_SKIPI_2(_1, _2, ...) __VA_ARGS__ +#define M_SKIPI_3(_1, _2, _3, ...) __VA_ARGS__ +#define M_SKIPI_4(_1, _2, _3, _4, ...) __VA_ARGS__ +#define M_SKIPI_5(_1, _2, _3, _4, _5, ...) __VA_ARGS__ +#define M_SKIPI_6(_1, _2, _3, _4, _5, _6, ...) __VA_ARGS__ +#define M_SKIPI_7(_1, _2, _3, _4, _5, _6, _7, ...) __VA_ARGS__ +#define M_SKIPI_8(_1, _2, _3, _4, _5, _6, _7, _8, ...) __VA_ARGS__ +#define M_SKIPI_9(_1, _2, _3, _4, _5, _6, _7, _8, _9, ...) __VA_ARGS__ +#define M_SKIPI_10(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) __VA_ARGS__ +#define M_SKIPI_11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) __VA_ARGS__ +#define M_SKIPI_12(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) __VA_ARGS__ +#define M_SKIPI_13(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) __VA_ARGS__ +#define M_SKIPI_14(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) __VA_ARGS__ +#define M_SKIPI_15(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) __VA_ARGS__ +#define M_SKIPI_16(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) __VA_ARGS__ +#define M_SKIPI_17(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) __VA_ARGS__ +#define M_SKIPI_18(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) __VA_ARGS__ +#define M_SKIPI_19(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) __VA_ARGS__ +#define M_SKIPI_20(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, ...) __VA_ARGS__ +#define M_SKIPI_21(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, ...) __VA_ARGS__ +#define M_SKIPI_22(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, ...) __VA_ARGS__ +#define M_SKIPI_23(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, ...) __VA_ARGS__ +#define M_SKIPI_24(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, ...) __VA_ARGS__ +#define M_SKIPI_25(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, ...) __VA_ARGS__ +#define M_SKIPI_26(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, ...) __VA_ARGS__ +#define M_SKIPI_27(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, ...) __VA_ARGS__ +#define M_SKIPI_28(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, ...) __VA_ARGS__ +#define M_SKIPI_29(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, ...) __VA_ARGS__ +#define M_SKIPI_30(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, ...) __VA_ARGS__ +#define M_SKIPI_31(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, ...) __VA_ARGS__ +#define M_SKIPI_32(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, ...) __VA_ARGS__ +#define M_SKIPI_33(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, ...) __VA_ARGS__ +#define M_SKIPI_34(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, ...) __VA_ARGS__ +#define M_SKIPI_35(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, ...) __VA_ARGS__ +#define M_SKIPI_36(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, ...) __VA_ARGS__ +#define M_SKIPI_37(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, ...) __VA_ARGS__ +#define M_SKIPI_38(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, ...) __VA_ARGS__ +#define M_SKIPI_39(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, ...) __VA_ARGS__ +#define M_SKIPI_40(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, ...) __VA_ARGS__ +#define M_SKIPI_41(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, ...) __VA_ARGS__ +#define M_SKIPI_42(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, ...) __VA_ARGS__ +#define M_SKIPI_43(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, ...) __VA_ARGS__ +#define M_SKIPI_44(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, ...) __VA_ARGS__ +#define M_SKIPI_45(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, ...) __VA_ARGS__ +#define M_SKIPI_46(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, ...) __VA_ARGS__ +#define M_SKIPI_47(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, ...) __VA_ARGS__ +#define M_SKIPI_48(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, ...) __VA_ARGS__ +#define M_SKIPI_49(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, ...) __VA_ARGS__ +#define M_SKIPI_50(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, ...) __VA_ARGS__ +#define M_SKIPI_51(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, ...) __VA_ARGS__ +#define M_SKIPI_52(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, ...) __VA_ARGS__ -#define M_RETI_ARG3(a, b, c, ...) c -#define M_RET_ARG3(...) M_RETI_ARG3(__VA_ARGS__) -#define M_RETI_ARG27(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa, ...) aa -#define M_RET_ARG27(...) M_RETI_ARG27(__VA_ARGS__) -#define M_RETI_ARG53(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z, aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az, ba, ...) ba -#define M_RET_ARG53(...) M_RETI_ARG53(__VA_ARGS__) +/* Keep the nth first arguments. + Generated by: + for i in $(seq 0 52) ; do printf "#define M_KEEPI_%d(" $i ; for j in $(seq 1 $i) ; do printf "_%d, " $j ; done ; printf "...) " ; for j in $(seq 1 $(($i - 1))) ; do printf "_%d, " $j; done ; if test "$i" -ne 0 ; then printf "_$i" ; fi ; printf "\n" ; done */ +#define M_KEEPI(f, ...) f(__VA_ARGS__) +#define M_KEEP(n, ...) M_KEEPI(M_C(M_KEEPI_, n), __VA_ARGS__) + +#define M_KEEPI_0(...) +#define M_KEEPI_1(_1, ...) _1 +#define M_KEEPI_2(_1, _2, ...) _1, _2 +#define M_KEEPI_3(_1, _2, _3, ...) _1, _2, _3 +#define M_KEEPI_4(_1, _2, _3, _4, ...) _1, _2, _3, _4 +#define M_KEEPI_5(_1, _2, _3, _4, _5, ...) _1, _2, _3, _4, _5 +#define M_KEEPI_6(_1, _2, _3, _4, _5, _6, ...) _1, _2, _3, _4, _5, _6 +#define M_KEEPI_7(_1, _2, _3, _4, _5, _6, _7, ...) _1, _2, _3, _4, _5, _6, _7 +#define M_KEEPI_8(_1, _2, _3, _4, _5, _6, _7, _8, ...) _1, _2, _3, _4, _5, _6, _7, _8 +#define M_KEEPI_9(_1, _2, _3, _4, _5, _6, _7, _8, _9, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9 +#define M_KEEPI_10(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10 +#define M_KEEPI_11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11 +#define M_KEEPI_12(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12 +#define M_KEEPI_13(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13 +#define M_KEEPI_14(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14 +#define M_KEEPI_15(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15 +#define M_KEEPI_16(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16 +#define M_KEEPI_17(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17 +#define M_KEEPI_18(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18 +#define M_KEEPI_19(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19 +#define M_KEEPI_20(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20 +#define M_KEEPI_21(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21 +#define M_KEEPI_22(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22 +#define M_KEEPI_23(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23 +#define M_KEEPI_24(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24 +#define M_KEEPI_25(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25 +#define M_KEEPI_26(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26 +#define M_KEEPI_27(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27 +#define M_KEEPI_28(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28 +#define M_KEEPI_29(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29 +#define M_KEEPI_30(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30 +#define M_KEEPI_31(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31 +#define M_KEEPI_32(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32 +#define M_KEEPI_33(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33 +#define M_KEEPI_34(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34 +#define M_KEEPI_35(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35 +#define M_KEEPI_36(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36 +#define M_KEEPI_37(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37 +#define M_KEEPI_38(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38 +#define M_KEEPI_39(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39 +#define M_KEEPI_40(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40 +#define M_KEEPI_41(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41 +#define M_KEEPI_42(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42 +#define M_KEEPI_43(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43 +#define M_KEEPI_44(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44 +#define M_KEEPI_45(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45 +#define M_KEEPI_46(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46 +#define M_KEEPI_47(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47 +#define M_KEEPI_48(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48 +#define M_KEEPI_49(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49 +#define M_KEEPI_50(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50 +#define M_KEEPI_51(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51 +#define M_KEEPI_52(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, ...) _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52 + +/* Keep the medium characters of a sequence */ +#define M_MID(first, len, ...) M_MIDI(M_KEEP,len, M_SKIP(first, __VA_ARGS__)) +#define M_MIDI(f, ...) f(__VA_ARGS__) /* Convert an integer or a symbol into 0 (if 0) or 1 (if not 0). 1 if symbol unknown */ @@ -450,387 +893,7 @@ M_MAP(f, M_SEQ(init, end)) ==> f(init) f(init+1) .... f(end) M_MAP2(f, d, M_SEQ(init, end)) */ -/* Generated by: - for i in $(seq 0 26); do for j in $(seq $i 26) ; do printf "#define M_SEQI_%d_%d " $i $j; for k in $(seq $i $(($j - 1))) ; do printf "%d," $k ;done ; printf "%d\n" $j; done ; done */ -#define M_SEQ(first, last) M_C4(M_SEQI_, first, _, last) -#define M_SEQI_0_0 0 -#define M_SEQI_0_1 0,1 -#define M_SEQI_0_2 0,1,2 -#define M_SEQI_0_3 0,1,2,3 -#define M_SEQI_0_4 0,1,2,3,4 -#define M_SEQI_0_5 0,1,2,3,4,5 -#define M_SEQI_0_6 0,1,2,3,4,5,6 -#define M_SEQI_0_7 0,1,2,3,4,5,6,7 -#define M_SEQI_0_8 0,1,2,3,4,5,6,7,8 -#define M_SEQI_0_9 0,1,2,3,4,5,6,7,8,9 -#define M_SEQI_0_10 0,1,2,3,4,5,6,7,8,9,10 -#define M_SEQI_0_11 0,1,2,3,4,5,6,7,8,9,10,11 -#define M_SEQI_0_12 0,1,2,3,4,5,6,7,8,9,10,11,12 -#define M_SEQI_0_13 0,1,2,3,4,5,6,7,8,9,10,11,12,13 -#define M_SEQI_0_14 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 -#define M_SEQI_0_15 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 -#define M_SEQI_0_16 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 -#define M_SEQI_0_17 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 -#define M_SEQI_0_18 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 -#define M_SEQI_0_19 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_0_20 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_0_21 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_0_22 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_0_23 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_0_24 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_0_25 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_0_26 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_1_1 1 -#define M_SEQI_1_2 1,2 -#define M_SEQI_1_3 1,2,3 -#define M_SEQI_1_4 1,2,3,4 -#define M_SEQI_1_5 1,2,3,4,5 -#define M_SEQI_1_6 1,2,3,4,5,6 -#define M_SEQI_1_7 1,2,3,4,5,6,7 -#define M_SEQI_1_8 1,2,3,4,5,6,7,8 -#define M_SEQI_1_9 1,2,3,4,5,6,7,8,9 -#define M_SEQI_1_10 1,2,3,4,5,6,7,8,9,10 -#define M_SEQI_1_11 1,2,3,4,5,6,7,8,9,10,11 -#define M_SEQI_1_12 1,2,3,4,5,6,7,8,9,10,11,12 -#define M_SEQI_1_13 1,2,3,4,5,6,7,8,9,10,11,12,13 -#define M_SEQI_1_14 1,2,3,4,5,6,7,8,9,10,11,12,13,14 -#define M_SEQI_1_15 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 -#define M_SEQI_1_16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 -#define M_SEQI_1_17 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 -#define M_SEQI_1_18 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 -#define M_SEQI_1_19 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_1_20 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_1_21 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_1_22 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_1_23 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_1_24 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_1_25 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_1_26 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_2_2 2 -#define M_SEQI_2_3 2,3 -#define M_SEQI_2_4 2,3,4 -#define M_SEQI_2_5 2,3,4,5 -#define M_SEQI_2_6 2,3,4,5,6 -#define M_SEQI_2_7 2,3,4,5,6,7 -#define M_SEQI_2_8 2,3,4,5,6,7,8 -#define M_SEQI_2_9 2,3,4,5,6,7,8,9 -#define M_SEQI_2_10 2,3,4,5,6,7,8,9,10 -#define M_SEQI_2_11 2,3,4,5,6,7,8,9,10,11 -#define M_SEQI_2_12 2,3,4,5,6,7,8,9,10,11,12 -#define M_SEQI_2_13 2,3,4,5,6,7,8,9,10,11,12,13 -#define M_SEQI_2_14 2,3,4,5,6,7,8,9,10,11,12,13,14 -#define M_SEQI_2_15 2,3,4,5,6,7,8,9,10,11,12,13,14,15 -#define M_SEQI_2_16 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 -#define M_SEQI_2_17 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 -#define M_SEQI_2_18 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 -#define M_SEQI_2_19 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_2_20 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_2_21 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_2_22 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_2_23 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_2_24 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_2_25 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_2_26 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_3_3 3 -#define M_SEQI_3_4 3,4 -#define M_SEQI_3_5 3,4,5 -#define M_SEQI_3_6 3,4,5,6 -#define M_SEQI_3_7 3,4,5,6,7 -#define M_SEQI_3_8 3,4,5,6,7,8 -#define M_SEQI_3_9 3,4,5,6,7,8,9 -#define M_SEQI_3_10 3,4,5,6,7,8,9,10 -#define M_SEQI_3_11 3,4,5,6,7,8,9,10,11 -#define M_SEQI_3_12 3,4,5,6,7,8,9,10,11,12 -#define M_SEQI_3_13 3,4,5,6,7,8,9,10,11,12,13 -#define M_SEQI_3_14 3,4,5,6,7,8,9,10,11,12,13,14 -#define M_SEQI_3_15 3,4,5,6,7,8,9,10,11,12,13,14,15 -#define M_SEQI_3_16 3,4,5,6,7,8,9,10,11,12,13,14,15,16 -#define M_SEQI_3_17 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 -#define M_SEQI_3_18 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 -#define M_SEQI_3_19 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_3_20 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_3_21 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_3_22 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_3_23 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_3_24 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_3_25 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_3_26 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_4_4 4 -#define M_SEQI_4_5 4,5 -#define M_SEQI_4_6 4,5,6 -#define M_SEQI_4_7 4,5,6,7 -#define M_SEQI_4_8 4,5,6,7,8 -#define M_SEQI_4_9 4,5,6,7,8,9 -#define M_SEQI_4_10 4,5,6,7,8,9,10 -#define M_SEQI_4_11 4,5,6,7,8,9,10,11 -#define M_SEQI_4_12 4,5,6,7,8,9,10,11,12 -#define M_SEQI_4_13 4,5,6,7,8,9,10,11,12,13 -#define M_SEQI_4_14 4,5,6,7,8,9,10,11,12,13,14 -#define M_SEQI_4_15 4,5,6,7,8,9,10,11,12,13,14,15 -#define M_SEQI_4_16 4,5,6,7,8,9,10,11,12,13,14,15,16 -#define M_SEQI_4_17 4,5,6,7,8,9,10,11,12,13,14,15,16,17 -#define M_SEQI_4_18 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 -#define M_SEQI_4_19 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_4_20 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_4_21 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_4_22 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_4_23 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_4_24 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_4_25 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_4_26 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_5_5 5 -#define M_SEQI_5_6 5,6 -#define M_SEQI_5_7 5,6,7 -#define M_SEQI_5_8 5,6,7,8 -#define M_SEQI_5_9 5,6,7,8,9 -#define M_SEQI_5_10 5,6,7,8,9,10 -#define M_SEQI_5_11 5,6,7,8,9,10,11 -#define M_SEQI_5_12 5,6,7,8,9,10,11,12 -#define M_SEQI_5_13 5,6,7,8,9,10,11,12,13 -#define M_SEQI_5_14 5,6,7,8,9,10,11,12,13,14 -#define M_SEQI_5_15 5,6,7,8,9,10,11,12,13,14,15 -#define M_SEQI_5_16 5,6,7,8,9,10,11,12,13,14,15,16 -#define M_SEQI_5_17 5,6,7,8,9,10,11,12,13,14,15,16,17 -#define M_SEQI_5_18 5,6,7,8,9,10,11,12,13,14,15,16,17,18 -#define M_SEQI_5_19 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_5_20 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_5_21 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_5_22 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_5_23 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_5_24 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_5_25 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_5_26 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_6_6 6 -#define M_SEQI_6_7 6,7 -#define M_SEQI_6_8 6,7,8 -#define M_SEQI_6_9 6,7,8,9 -#define M_SEQI_6_10 6,7,8,9,10 -#define M_SEQI_6_11 6,7,8,9,10,11 -#define M_SEQI_6_12 6,7,8,9,10,11,12 -#define M_SEQI_6_13 6,7,8,9,10,11,12,13 -#define M_SEQI_6_14 6,7,8,9,10,11,12,13,14 -#define M_SEQI_6_15 6,7,8,9,10,11,12,13,14,15 -#define M_SEQI_6_16 6,7,8,9,10,11,12,13,14,15,16 -#define M_SEQI_6_17 6,7,8,9,10,11,12,13,14,15,16,17 -#define M_SEQI_6_18 6,7,8,9,10,11,12,13,14,15,16,17,18 -#define M_SEQI_6_19 6,7,8,9,10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_6_20 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_6_21 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_6_22 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_6_23 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_6_24 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_6_25 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_6_26 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_7_7 7 -#define M_SEQI_7_8 7,8 -#define M_SEQI_7_9 7,8,9 -#define M_SEQI_7_10 7,8,9,10 -#define M_SEQI_7_11 7,8,9,10,11 -#define M_SEQI_7_12 7,8,9,10,11,12 -#define M_SEQI_7_13 7,8,9,10,11,12,13 -#define M_SEQI_7_14 7,8,9,10,11,12,13,14 -#define M_SEQI_7_15 7,8,9,10,11,12,13,14,15 -#define M_SEQI_7_16 7,8,9,10,11,12,13,14,15,16 -#define M_SEQI_7_17 7,8,9,10,11,12,13,14,15,16,17 -#define M_SEQI_7_18 7,8,9,10,11,12,13,14,15,16,17,18 -#define M_SEQI_7_19 7,8,9,10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_7_20 7,8,9,10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_7_21 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_7_22 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_7_23 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_7_24 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_7_25 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_7_26 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_8_8 8 -#define M_SEQI_8_9 8,9 -#define M_SEQI_8_10 8,9,10 -#define M_SEQI_8_11 8,9,10,11 -#define M_SEQI_8_12 8,9,10,11,12 -#define M_SEQI_8_13 8,9,10,11,12,13 -#define M_SEQI_8_14 8,9,10,11,12,13,14 -#define M_SEQI_8_15 8,9,10,11,12,13,14,15 -#define M_SEQI_8_16 8,9,10,11,12,13,14,15,16 -#define M_SEQI_8_17 8,9,10,11,12,13,14,15,16,17 -#define M_SEQI_8_18 8,9,10,11,12,13,14,15,16,17,18 -#define M_SEQI_8_19 8,9,10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_8_20 8,9,10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_8_21 8,9,10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_8_22 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_8_23 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_8_24 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_8_25 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_8_26 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_9_9 9 -#define M_SEQI_9_10 9,10 -#define M_SEQI_9_11 9,10,11 -#define M_SEQI_9_12 9,10,11,12 -#define M_SEQI_9_13 9,10,11,12,13 -#define M_SEQI_9_14 9,10,11,12,13,14 -#define M_SEQI_9_15 9,10,11,12,13,14,15 -#define M_SEQI_9_16 9,10,11,12,13,14,15,16 -#define M_SEQI_9_17 9,10,11,12,13,14,15,16,17 -#define M_SEQI_9_18 9,10,11,12,13,14,15,16,17,18 -#define M_SEQI_9_19 9,10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_9_20 9,10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_9_21 9,10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_9_22 9,10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_9_23 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_9_24 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_9_25 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_9_26 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_10_10 10 -#define M_SEQI_10_11 10,11 -#define M_SEQI_10_12 10,11,12 -#define M_SEQI_10_13 10,11,12,13 -#define M_SEQI_10_14 10,11,12,13,14 -#define M_SEQI_10_15 10,11,12,13,14,15 -#define M_SEQI_10_16 10,11,12,13,14,15,16 -#define M_SEQI_10_17 10,11,12,13,14,15,16,17 -#define M_SEQI_10_18 10,11,12,13,14,15,16,17,18 -#define M_SEQI_10_19 10,11,12,13,14,15,16,17,18,19 -#define M_SEQI_10_20 10,11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_10_21 10,11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_10_22 10,11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_10_23 10,11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_10_24 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_10_25 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_10_26 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_11_11 11 -#define M_SEQI_11_12 11,12 -#define M_SEQI_11_13 11,12,13 -#define M_SEQI_11_14 11,12,13,14 -#define M_SEQI_11_15 11,12,13,14,15 -#define M_SEQI_11_16 11,12,13,14,15,16 -#define M_SEQI_11_17 11,12,13,14,15,16,17 -#define M_SEQI_11_18 11,12,13,14,15,16,17,18 -#define M_SEQI_11_19 11,12,13,14,15,16,17,18,19 -#define M_SEQI_11_20 11,12,13,14,15,16,17,18,19,20 -#define M_SEQI_11_21 11,12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_11_22 11,12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_11_23 11,12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_11_24 11,12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_11_25 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_11_26 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_12_12 12 -#define M_SEQI_12_13 12,13 -#define M_SEQI_12_14 12,13,14 -#define M_SEQI_12_15 12,13,14,15 -#define M_SEQI_12_16 12,13,14,15,16 -#define M_SEQI_12_17 12,13,14,15,16,17 -#define M_SEQI_12_18 12,13,14,15,16,17,18 -#define M_SEQI_12_19 12,13,14,15,16,17,18,19 -#define M_SEQI_12_20 12,13,14,15,16,17,18,19,20 -#define M_SEQI_12_21 12,13,14,15,16,17,18,19,20,21 -#define M_SEQI_12_22 12,13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_12_23 12,13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_12_24 12,13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_12_25 12,13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_12_26 12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_13_13 13 -#define M_SEQI_13_14 13,14 -#define M_SEQI_13_15 13,14,15 -#define M_SEQI_13_16 13,14,15,16 -#define M_SEQI_13_17 13,14,15,16,17 -#define M_SEQI_13_18 13,14,15,16,17,18 -#define M_SEQI_13_19 13,14,15,16,17,18,19 -#define M_SEQI_13_20 13,14,15,16,17,18,19,20 -#define M_SEQI_13_21 13,14,15,16,17,18,19,20,21 -#define M_SEQI_13_22 13,14,15,16,17,18,19,20,21,22 -#define M_SEQI_13_23 13,14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_13_24 13,14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_13_25 13,14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_13_26 13,14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_14_14 14 -#define M_SEQI_14_15 14,15 -#define M_SEQI_14_16 14,15,16 -#define M_SEQI_14_17 14,15,16,17 -#define M_SEQI_14_18 14,15,16,17,18 -#define M_SEQI_14_19 14,15,16,17,18,19 -#define M_SEQI_14_20 14,15,16,17,18,19,20 -#define M_SEQI_14_21 14,15,16,17,18,19,20,21 -#define M_SEQI_14_22 14,15,16,17,18,19,20,21,22 -#define M_SEQI_14_23 14,15,16,17,18,19,20,21,22,23 -#define M_SEQI_14_24 14,15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_14_25 14,15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_14_26 14,15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_15_15 15 -#define M_SEQI_15_16 15,16 -#define M_SEQI_15_17 15,16,17 -#define M_SEQI_15_18 15,16,17,18 -#define M_SEQI_15_19 15,16,17,18,19 -#define M_SEQI_15_20 15,16,17,18,19,20 -#define M_SEQI_15_21 15,16,17,18,19,20,21 -#define M_SEQI_15_22 15,16,17,18,19,20,21,22 -#define M_SEQI_15_23 15,16,17,18,19,20,21,22,23 -#define M_SEQI_15_24 15,16,17,18,19,20,21,22,23,24 -#define M_SEQI_15_25 15,16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_15_26 15,16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_16_16 16 -#define M_SEQI_16_17 16,17 -#define M_SEQI_16_18 16,17,18 -#define M_SEQI_16_19 16,17,18,19 -#define M_SEQI_16_20 16,17,18,19,20 -#define M_SEQI_16_21 16,17,18,19,20,21 -#define M_SEQI_16_22 16,17,18,19,20,21,22 -#define M_SEQI_16_23 16,17,18,19,20,21,22,23 -#define M_SEQI_16_24 16,17,18,19,20,21,22,23,24 -#define M_SEQI_16_25 16,17,18,19,20,21,22,23,24,25 -#define M_SEQI_16_26 16,17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_17_17 17 -#define M_SEQI_17_18 17,18 -#define M_SEQI_17_19 17,18,19 -#define M_SEQI_17_20 17,18,19,20 -#define M_SEQI_17_21 17,18,19,20,21 -#define M_SEQI_17_22 17,18,19,20,21,22 -#define M_SEQI_17_23 17,18,19,20,21,22,23 -#define M_SEQI_17_24 17,18,19,20,21,22,23,24 -#define M_SEQI_17_25 17,18,19,20,21,22,23,24,25 -#define M_SEQI_17_26 17,18,19,20,21,22,23,24,25,26 -#define M_SEQI_18_18 18 -#define M_SEQI_18_19 18,19 -#define M_SEQI_18_20 18,19,20 -#define M_SEQI_18_21 18,19,20,21 -#define M_SEQI_18_22 18,19,20,21,22 -#define M_SEQI_18_23 18,19,20,21,22,23 -#define M_SEQI_18_24 18,19,20,21,22,23,24 -#define M_SEQI_18_25 18,19,20,21,22,23,24,25 -#define M_SEQI_18_26 18,19,20,21,22,23,24,25,26 -#define M_SEQI_19_19 19 -#define M_SEQI_19_20 19,20 -#define M_SEQI_19_21 19,20,21 -#define M_SEQI_19_22 19,20,21,22 -#define M_SEQI_19_23 19,20,21,22,23 -#define M_SEQI_19_24 19,20,21,22,23,24 -#define M_SEQI_19_25 19,20,21,22,23,24,25 -#define M_SEQI_19_26 19,20,21,22,23,24,25,26 -#define M_SEQI_20_20 20 -#define M_SEQI_20_21 20,21 -#define M_SEQI_20_22 20,21,22 -#define M_SEQI_20_23 20,21,22,23 -#define M_SEQI_20_24 20,21,22,23,24 -#define M_SEQI_20_25 20,21,22,23,24,25 -#define M_SEQI_20_26 20,21,22,23,24,25,26 -#define M_SEQI_21_21 21 -#define M_SEQI_21_22 21,22 -#define M_SEQI_21_23 21,22,23 -#define M_SEQI_21_24 21,22,23,24 -#define M_SEQI_21_25 21,22,23,24,25 -#define M_SEQI_21_26 21,22,23,24,25,26 -#define M_SEQI_22_22 22 -#define M_SEQI_22_23 22,23 -#define M_SEQI_22_24 22,23,24 -#define M_SEQI_22_25 22,23,24,25 -#define M_SEQI_22_26 22,23,24,25,26 -#define M_SEQI_23_23 23 -#define M_SEQI_23_24 23,24 -#define M_SEQI_23_25 23,24,25 -#define M_SEQI_23_26 23,24,25,26 -#define M_SEQI_24_24 24 -#define M_SEQI_24_25 24,25 -#define M_SEQI_24_26 24,25,26 -#define M_SEQI_25_25 25 -#define M_SEQI_25_26 25,26 -#define M_SEQI_26_26 26 +#define M_SEQ(init, end) M_MID(init, M_INC(M_SUB(end, init)), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52) /* Return the input (delay evaluation) */ #define M_ID(...) __VA_ARGS__ @@ -870,6 +933,7 @@ #define M_IF_DEFAULT1(value, ...) \ __VA_ARGS__ M_IF_NARGS_EQ1(__VA_ARGS__)(M_DEFERRED_COMMA value, ) + /* NOTEQUAL(val1,val2) with val from [0 to 30[ Return 1 or 0 if val1=val2 */ @@ -903,22 +967,31 @@ #define M_NOTEQUAL_27_27 0 #define M_NOTEQUAL_28_28 0 #define M_NOTEQUAL_29_29 0 +#define M_NOTEQUAL_30_30 0 +#define M_NOTEQUAL_31_31 0 +#define M_NOTEQUAL_32_32 0 +#define M_NOTEQUAL_33_33 0 +#define M_NOTEQUAL_34_34 0 +#define M_NOTEQUAL_35_35 0 +#define M_NOTEQUAL_36_36 0 +#define M_NOTEQUAL_37_37 0 +#define M_NOTEQUAL_38_38 0 +#define M_NOTEQUAL_39_39 0 +#define M_NOTEQUAL_40_40 0 +#define M_NOTEQUAL_41_41 0 +#define M_NOTEQUAL_42_42 0 +#define M_NOTEQUAL_43_43 0 +#define M_NOTEQUAL_44_44 0 +#define M_NOTEQUAL_45_45 0 +#define M_NOTEQUAL_46_46 0 +#define M_NOTEQUAL_47_47 0 +#define M_NOTEQUAL_48_48 0 +#define M_NOTEQUAL_49_49 0 +#define M_NOTEQUAL_50_50 0 +#define M_NOTEQUAL_51_51 0 +#define M_NOTEQUAL_52_52 0 #define M_NOTEQUAL(x,y) M_BOOL(M_C4(M_NOTEQUAL_, x, _, y)) -/* ADD: Through recursivity. - Example: ADD(4,5) --> 9 */ -#define M_ADD_L0_INDIRECT() M_ADD_L0 -#define M_ADD_L1(x,y) M_DELAY3(M_ADD_L0_INDIRECT) () (M_INC(x), M_DEC(y)) -#define M_ADD_L0(x,y) M_IF(M_BOOL(y)) (M_ADD_L1(x,y) , x) -#define M_ADD(x,y) M_EVAL(M_ADD_L0(x,y)) - -/* SUB: Through recursivity - Example: SUB(15,6) --> 11 */ -#define M_SUB_L0_INDIRECT() M_SUB_L0 -#define M_SUB_L1(x,y) M_DELAY3(M_SUB_L0_INDIRECT) () (M_DEC(x), M_DEC(y)) -#define M_SUB_L0(x,y) M_IF(M_BOOL(y)) (M_SUB_L1(x,y) , x) -#define M_SUB(x,y) M_EVAL(M_SUB_L0(x,y)) - /* EQUAL(val1,val2) with valN from [0 to 30[ Return 1 if val1=val2 or 0 Example: M_EQUAL(1,2) --> 0