IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
TemplateMacro.h
Go to the documentation of this file.
1 // TemplateMacro.h:
3 // ----------------
4 //
13 
14 #ifndef __IPSDKUTIL_TEMPLATEMACRO_H__
15 #define __IPSDKUTIL_TEMPLATEMACRO_H__
16 
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>
22 
25 
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))
30 
33 #define IPSDK_TEMPLATE_PARAMS_TYPED_OR_RAW_FALSE(T) \
34  typename BOOST_PP_CAT(_, BOOST_PP_SEQ_ELEM(0, T))
35 
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)
46 
49 #define IPSDK_TEMPLATE_PARAMS_MACRO(r, data, i, T) \
50  BOOST_PP_COMMA_IF(i) IPSDK_TEMPLATE_PARAMS_TYPED_OR_RAW(T)
51 
57 #define IPSDK_TEMPLATE_PARAMS(seqT) \
58  template <BOOST_PP_SEQ_FOR_EACH_I(IPSDK_TEMPLATE_PARAMS_MACRO, _, seqT)>
59 
62 
65 #define IPSDK_TEMPLATE_ARGS_TYPED_OR_RAW_TRUE(T) \
66  BOOST_PP_CAT(_, BOOST_PP_SEQ_ELEM(1, T))
67 
70 #define IPSDK_TEMPLATE_ARGS_TYPED_OR_RAW_FALSE(T) \
71  BOOST_PP_CAT(_, BOOST_PP_SEQ_ELEM(0, T))
72 
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)
83 
86 #define IPSDK_TEMPLATE_ARGS_MACRO(r, data, i, T) \
87  BOOST_PP_COMMA_IF(i) IPSDK_TEMPLATE_ARGS_TYPED_OR_RAW(T)
88 
94 #define IPSDK_TEMPLATE_ARGS(seqT) \
95  BOOST_PP_SEQ_FOR_EACH_I(IPSDK_TEMPLATE_ARGS_MACRO, _, seqT)
96 
99 #define IPSDK_TEMPLATE_VALUES_MACRO(s, data, T) \
100  BOOST_PP_CAT(_, T)
101 
107 #define IPSDK_TEMPLATE_VALUES(seqT) \
108  BOOST_PP_SEQ_ENUM(seqT)
109 
112 
113 #endif // __IPSDKUTIL_TEMPLATEMACRO_H__
Base macros set for IPSDK library.