00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef WTYPETRAITS_H
00026 #define WTYPETRAITS_H
00027
00028 #include <stdint.h>
00029
00030
00031
00032
00033 namespace WTypeTraits
00034 {
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 template < typename T1, typename T2 >
00046 class TypePromotion;
00047
00048
00049
00050
00051
00052
00053 template < typename T >
00054 class TypePromotion< T, T >
00055 {
00056 public:
00057 typedef T Result;
00058 };
00059
00060
00061 #define CREATEPROMOTION( T1, T2, ResultType ) \
00062 template <> \
00063 class TypePromotion< T1, T2 > \
00064 { \
00065 public: \
00066 typedef ResultType Result; \
00067 }; \
00068 \
00069 template <> \
00070 class TypePromotion< T2, T1 > \
00071 { \
00072 public: \
00073 typedef ResultType Result; \
00074 }; \
00075
00076
00077
00078
00079
00080
00081
00082
00083 CREATEPROMOTION( double, float, double )
00084 CREATEPROMOTION( double, int64_t, double )
00085 CREATEPROMOTION( double, int32_t, double )
00086 CREATEPROMOTION( double, int16_t, double )
00087 CREATEPROMOTION( double, int8_t, double )
00088 CREATEPROMOTION( double, uint64_t, double )
00089 CREATEPROMOTION( double, uint32_t, double )
00090 CREATEPROMOTION( double, uint16_t, double )
00091 CREATEPROMOTION( double, uint8_t, double )
00092
00093
00094 CREATEPROMOTION( float, int64_t, float )
00095 CREATEPROMOTION( float, int32_t, float )
00096 CREATEPROMOTION( float, int16_t, float )
00097 CREATEPROMOTION( float, int8_t, float )
00098 CREATEPROMOTION( float, uint64_t, float )
00099 CREATEPROMOTION( float, uint32_t, float )
00100 CREATEPROMOTION( float, uint16_t, float )
00101 CREATEPROMOTION( float, uint8_t, float )
00102
00103
00104 CREATEPROMOTION( int64_t, int32_t, int64_t )
00105 CREATEPROMOTION( int64_t, int16_t, int64_t )
00106 CREATEPROMOTION( int64_t, int8_t, int64_t )
00107 CREATEPROMOTION( int64_t, uint64_t, double )
00108 CREATEPROMOTION( int64_t, uint32_t, int64_t )
00109 CREATEPROMOTION( int64_t, uint16_t, int64_t )
00110 CREATEPROMOTION( int64_t, uint8_t, int64_t )
00111
00112
00113 CREATEPROMOTION( int32_t, int16_t, int32_t )
00114 CREATEPROMOTION( int32_t, int8_t, int32_t )
00115 CREATEPROMOTION( int32_t, uint64_t, double )
00116 CREATEPROMOTION( int32_t, uint32_t, int64_t )
00117 CREATEPROMOTION( int32_t, uint16_t, int32_t )
00118 CREATEPROMOTION( int32_t, uint8_t, int32_t )
00119
00120
00121 CREATEPROMOTION( int16_t, int8_t, int16_t )
00122 CREATEPROMOTION( int16_t, uint64_t, double )
00123 CREATEPROMOTION( int16_t, uint32_t, int64_t )
00124 CREATEPROMOTION( int16_t, uint16_t, int32_t )
00125 CREATEPROMOTION( int16_t, uint8_t, int16_t )
00126
00127
00128 CREATEPROMOTION( int8_t, uint64_t, double )
00129 CREATEPROMOTION( int8_t, uint32_t, int64_t )
00130 CREATEPROMOTION( int8_t, uint16_t, int32_t )
00131 CREATEPROMOTION( int8_t, uint8_t, int16_t )
00132
00133
00134 CREATEPROMOTION( uint64_t, uint32_t, uint64_t )
00135 CREATEPROMOTION( uint64_t, uint16_t, uint64_t )
00136 CREATEPROMOTION( uint64_t, uint8_t, uint64_t )
00137
00138
00139 CREATEPROMOTION( uint32_t, uint16_t, uint32_t )
00140 CREATEPROMOTION( uint32_t, uint8_t, uint32_t )
00141
00142
00143 CREATEPROMOTION( uint16_t, uint8_t, uint16_t )
00144
00145
00146
00147
00148
00149
00150 }
00151
00152 #endif // WTYPETRAITS_H
00153