15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_PROMOTEDTYPE_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_PROMOTEDTYPE_H__ 20 #include <boost/type_traits/is_signed.hpp> 30 ,
bool choose1 = (
sizeof(T1) >
sizeof(T2))
38 template<
typename T1,
typename T2 >
39 struct choose_larger< T1, T2, false >
49 template <
typename T1,
typename T2,
56 template <
typename T1,
typename T2>
57 struct PromotedType<T1, T2,
58 typename
boost::enable_if_c<
59 boost::is_integral<T1>::value
60 && !boost::is_integral<T2>::value
68 template <
typename T1,
typename T2>
69 struct PromotedType<T1, T2,
70 typename
boost::enable_if_c<
71 !boost::is_integral<T1>::value
72 && boost::is_integral<T2>::value
81 template <
typename T1,
typename T2>
82 struct PromotedType<T1, T2,
83 typename
boost::enable_if_c<
84 boost::is_integral<T1>::value == boost::is_integral<T2>::value
85 && sizeof(T1) != sizeof(T2)
88 typedef typename choose_larger<T1, T2>::Type Type;
92 template <
typename T1,
typename T2>
93 struct PromotedType<T1, T2,
94 typename
boost::enable_if_c<
95 boost::is_same<T1, T2>::value
103 template <
typename T1,
typename T2>
104 struct PromotedType<T1, T2,
105 typename
boost::enable_if_c<
106 boost::is_integral<T1>::value
107 && boost::is_integral<T2>::value
108 && sizeof(T1) == sizeof(T2)
109 && boost::is_signed<T1>::value
110 && !boost::is_signed<T2>::value
118 template <
typename T1,
typename T2>
119 struct PromotedType<T1, T2,
120 typename
boost::enable_if_c<
121 boost::is_integral<T1>::value
122 && boost::is_integral<T2>::value
123 && sizeof(T1) == sizeof(T2)
124 && !boost::is_signed<T1>::value
125 && boost::is_signed<T2>::value
132 template <
typename T1,
typename T2,
typename T3>
136 typename PromotedType<typename PromotedType<T1, T2>::Type, T3>::Type
147 #endif // __IPSDKUTIL_INSTRUCTIONSET_PROMOTEDTYPE_H__ Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Definition: DataItemNodeHdrMacrosDetails.h:48
Definition of import/export macro for library.