[ create a new paste ] login | about

Link: http://codepad.org/IwJ4sqA9    [ raw code | fork ]

DigitalGhost - C++, pasted on Nov 9:
#include <boost/preprocessor/control/if.hpp>

#define PP_IF BOOST_PP_IF

#define PP_IS_EMPTY(...) PP_IS_EMPTY_I(__VA_ARGS__, NIL)
#define PP_IS_EMPTY_I(a, ...) PP_IS_EMPTY_II((HELPER_I a, HELPER_I __VA_ARGS__))
#define PP_IS_EMPTY_II(a) PP_IS_EMPTY_III a
#define PP_IS_EMPTY_III(a, ...) PP_IS_EMPTY_IV((HELPER_II_ ## a, HELPER_III_ ## __VA_ARGS__))
#define PP_IS_EMPTY_IV(a) PP_IS_EMPTY_V a
#define PP_IS_EMPTY_V(a, ...) PP_IS_EMPTY_VI((a __VA_ARGS__ ()))
#define PP_IS_EMPTY_VI(a) PP_IS_EMPTY_VII(a)
#define PP_IS_EMPTY_VII(a) PP_IS_EMPTY_VIII a
#define PP_IS_EMPTY_VIII(a, ...) PP_IS_EMPTY_IX((HELPER_IV_ ## a))
#define PP_IS_EMPTY_IX(a) PP_IS_EMPTY_X a
#define PP_IS_EMPTY_X(a, ...) a

#define HELPER_I(...) EXPANDED
#define HELPER_II_HELPER_I() EMPTY
#define HELPER_III_HELPER_I
#define NIL() ()

#define HELPER_IV_EMPTY 1 ,
#define HELPER_IV_HELPER_II_HELPER_I 0 ,
#define HELPER_IV_HELPER_II_EXPANDED 0 ,

#define PP_TUPLE_EAT(...)

#define PP_TUPLE_SIZE(tup) PP_IF(PP_IS_EMPTY tup, 1 PP_TUPLE_EAT, PP_TUPLE_SIZE_1) tup
#define PP_TUPLE_SIZE_1(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 2 PP_TUPLE_EAT, PP_TUPLE_SIZE_2) (__VA_ARGS__)
#define PP_TUPLE_SIZE_2(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 3 PP_TUPLE_EAT, PP_TUPLE_SIZE_3) (__VA_ARGS__)
#define PP_TUPLE_SIZE_3(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 4 PP_TUPLE_EAT, PP_TUPLE_SIZE_4) (__VA_ARGS__)
#define PP_TUPLE_SIZE_4(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 5 PP_TUPLE_EAT, PP_TUPLE_SIZE_5) (__VA_ARGS__)
#define PP_TUPLE_SIZE_5(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 6 PP_TUPLE_EAT, PP_TUPLE_SIZE_6) (__VA_ARGS__)
#define PP_TUPLE_SIZE_6(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 7 PP_TUPLE_EAT, PP_TUPLE_SIZE_7) (__VA_ARGS__)
#define PP_TUPLE_SIZE_7(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 8 PP_TUPLE_EAT, PP_TUPLE_SIZE_8) (__VA_ARGS__)
#define PP_TUPLE_SIZE_8(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 9 PP_TUPLE_EAT, PP_TUPLE_SIZE_9) (__VA_ARGS__)
#define PP_TUPLE_SIZE_9(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 10 PP_TUPLE_EAT, PP_TUPLE_SIZE_10) (__VA_ARGS__)
#define PP_TUPLE_SIZE_10(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 11 PP_TUPLE_EAT, PP_TUPLE_SIZE_11) (__VA_ARGS__)
#define PP_TUPLE_SIZE_11(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 12 PP_TUPLE_EAT, PP_TUPLE_SIZE_12) (__VA_ARGS__)
#define PP_TUPLE_SIZE_12(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 13 PP_TUPLE_EAT, PP_TUPLE_SIZE_13) (__VA_ARGS__)
#define PP_TUPLE_SIZE_13(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 14 PP_TUPLE_EAT, PP_TUPLE_SIZE_14) (__VA_ARGS__)
#define PP_TUPLE_SIZE_14(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 15 PP_TUPLE_EAT, PP_TUPLE_SIZE_15) (__VA_ARGS__)
#define PP_TUPLE_SIZE_15(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 16 PP_TUPLE_EAT, PP_TUPLE_SIZE_16) (__VA_ARGS__)
#define PP_TUPLE_SIZE_16(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 17 PP_TUPLE_EAT, PP_TUPLE_SIZE_17) (__VA_ARGS__)
#define PP_TUPLE_SIZE_17(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 18 PP_TUPLE_EAT, PP_TUPLE_SIZE_18) (__VA_ARGS__)
#define PP_TUPLE_SIZE_18(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 19 PP_TUPLE_EAT, PP_TUPLE_SIZE_19) (__VA_ARGS__)
#define PP_TUPLE_SIZE_19(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 20 PP_TUPLE_EAT, PP_TUPLE_SIZE_20) (__VA_ARGS__)
#define PP_TUPLE_SIZE_20(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 21 PP_TUPLE_EAT, PP_TUPLE_SIZE_21) (__VA_ARGS__)
#define PP_TUPLE_SIZE_21(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 22 PP_TUPLE_EAT, PP_TUPLE_SIZE_22) (__VA_ARGS__)
#define PP_TUPLE_SIZE_22(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 23 PP_TUPLE_EAT, PP_TUPLE_SIZE_23) (__VA_ARGS__)
#define PP_TUPLE_SIZE_23(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 24 PP_TUPLE_EAT, PP_TUPLE_SIZE_24) (__VA_ARGS__)
#define PP_TUPLE_SIZE_24(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 25 PP_TUPLE_EAT, PP_TUPLE_SIZE_25) (__VA_ARGS__)
#define PP_TUPLE_SIZE_25(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 26 PP_TUPLE_EAT, PP_TUPLE_SIZE_26) (__VA_ARGS__)
#define PP_TUPLE_SIZE_26(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 27 PP_TUPLE_EAT, PP_TUPLE_SIZE_27) (__VA_ARGS__)
#define PP_TUPLE_SIZE_27(a, ...) PP_IF(PP_IS_EMPTY(__VA_ARGS__), 28 PP_TUPLE_EAT, PP_TUPLE_SIZE_28) (__VA_ARGS__)
#define PP_TUPLE_SIZE_28(...) PP_TUPLE_SIZE_ERROR

PP_TUPLE_SIZE(()) // 1
PP_TUPLE_SIZE((,,,20,,)) // 6


Create a new paste based on this one


Comments: