Go to the documentation of this file. 62 #define SST_EVAL0(...) __VA_ARGS__ 63 #define SST_EVAL1(...) SST_EVAL0(SST_EVAL0(SST_EVAL0(__VA_ARGS__))) 64 #define SST_EVAL2(...) SST_EVAL1(SST_EVAL1(SST_EVAL1(__VA_ARGS__))) 65 #define SST_EVAL3(...) SST_EVAL2(SST_EVAL2(SST_EVAL2(__VA_ARGS__))) 66 #define SST_EVAL4(...) SST_EVAL3(SST_EVAL3(SST_EVAL3(__VA_ARGS__))) 67 #define SST_EVAL(...) SST_EVAL4(SST_EVAL4(SST_EVAL4(__VA_ARGS__))) 69 #define SST_MAP_END(...) 71 #define SST_MAP_COMMA , 73 #define SST_MAP_GET_END2() 0, SST_MAP_END 74 #define SST_MAP_GET_END1(...) SST_MAP_GET_END2 75 #define SST_MAP_GET_END(...) SST_MAP_GET_END1 76 #define SST_MAP_NEXT0(test, next, ...) next SST_MAP_OUT 77 #define SST_MAP_NEXT1(test, next) SST_MAP_NEXT0(test, next, 0) 78 #define SST_MAP_NEXT(test, next) SST_MAP_NEXT1(SST_MAP_GET_END test, next) 80 #define SST_MAP0(f, x, peek, ...) \ 81 f(x) SST_MAP_NEXT(peek, SST_MAP1)(f, peek, __VA_ARGS__) 82 #define SST_MAP1(f, x, peek, ...) \ 83 f(x) SST_MAP_NEXT(peek, SST_MAP0)(f, peek, __VA_ARGS__) 85 #define SST_MAP_LIST_NEXT1(test, next) \ 86 SST_MAP_NEXT0(test, SST_MAP_COMMA next, 0) 87 #define SST_MAP_LIST_NEXT(test, next) \ 88 SST_MAP_LIST_NEXT1(SST_MAP_GET_END test, next) 90 #define SST_MAP_LIST0(f, x, peek, ...) \ 91 f(x) SST_MAP_LIST_NEXT(peek, SST_MAP_LIST1)(f, peek, __VA_ARGS__) 92 #define SST_MAP_LIST1(f, x, peek, ...) \ 93 f(x) SST_MAP_LIST_NEXT(peek, SST_MAP_LIST0)(f, peek, __VA_ARGS__) 103 #define SST_MAP(f, ...) \ 104 SST_EVAL(SST_MAP1(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) 116 #define SST_MAP_LIST(f, ...) \ 117 SST_EVAL(SST_MAP_LIST1(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) 121 #define EZC_TO_ZERO(ptr) ((ptr) = 0) 123 #define EZC_DO_FREE(ptr) (free((ptr)))