14 #ifndef __IPSDKUTIL_TEMPLATEMACRO_H__ 15 #define __IPSDKUTIL_TEMPLATEMACRO_H__ 17 #include <boost/preprocessor/seq/for_each.hpp> 18 #include <boost/preprocessor/seq/elem.hpp> 19 #include <boost/preprocessor/seq/pop_front.hpp> 20 #include <boost/preprocessor/seq/enum.hpp> 28 #define IPSDK_TEMPLATE_PARAMS_TYPED_OR_RAW_TRUE(T) \ 29 BOOST_PP_SEQ_ELEM(0, T) BOOST_PP_CAT(_, BOOST_PP_SEQ_ELEM(1, T)) 33 #define IPSDK_TEMPLATE_PARAMS_TYPED_OR_RAW_FALSE(T) \ 34 typename BOOST_PP_CAT(_, BOOST_PP_SEQ_ELEM(0, T)) 42 #define IPSDK_TEMPLATE_PARAMS_TYPED_OR_RAW(T) \ 43 BOOST_PP_IF(BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(T), 1), \ 44 IPSDK_TEMPLATE_PARAMS_TYPED_OR_RAW_TRUE, \ 45 IPSDK_TEMPLATE_PARAMS_TYPED_OR_RAW_FALSE)(T) 49 #define IPSDK_TEMPLATE_PARAMS_MACRO(r, data, i, T) \ 50 BOOST_PP_COMMA_IF(i) IPSDK_TEMPLATE_PARAMS_TYPED_OR_RAW(T) 57 #define IPSDK_TEMPLATE_PARAMS(seqT) \ 58 template <BOOST_PP_SEQ_FOR_EACH_I(IPSDK_TEMPLATE_PARAMS_MACRO, _, seqT)> 65 #define IPSDK_TEMPLATE_ARGS_TYPED_OR_RAW_TRUE(T) \ 66 BOOST_PP_CAT(_, BOOST_PP_SEQ_ELEM(1, T)) 70 #define IPSDK_TEMPLATE_ARGS_TYPED_OR_RAW_FALSE(T) \ 71 BOOST_PP_CAT(_, BOOST_PP_SEQ_ELEM(0, T)) 79 #define IPSDK_TEMPLATE_ARGS_TYPED_OR_RAW(T) \ 80 BOOST_PP_IF(BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(T), 1), \ 81 IPSDK_TEMPLATE_ARGS_TYPED_OR_RAW_TRUE, \ 82 IPSDK_TEMPLATE_ARGS_TYPED_OR_RAW_FALSE)(T) 86 #define IPSDK_TEMPLATE_ARGS_MACRO(r, data, i, T) \ 87 BOOST_PP_COMMA_IF(i) IPSDK_TEMPLATE_ARGS_TYPED_OR_RAW(T) 94 #define IPSDK_TEMPLATE_ARGS(seqT) \ 95 BOOST_PP_SEQ_FOR_EACH_I(IPSDK_TEMPLATE_ARGS_MACRO, _, seqT) 99 #define IPSDK_TEMPLATE_VALUES_MACRO(s, data, T) \ 107 #define IPSDK_TEMPLATE_VALUES(seqT) \ 108 BOOST_PP_SEQ_ENUM(seqT) 113 #endif // __IPSDKUTIL_TEMPLATEMACRO_H__ Base macros set for IPSDK library.