00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef SHDATATYPEIMPL_HPP
00025 #define SHDATATYPEIMPL_HPP
00026
00027 #include <climits>
00028 #include <cmath>
00029 #include <algorithm>
00030 #include "ShDataType.hpp"
00031
00032 namespace SH {
00033
00035 template<typename T, ShDataType DT>
00036 inline
00037 typename ShDataTypeCppType<T, DT>::type shDataTypeCond(bool cond)
00038 {
00039 return cond ? ShDataTypeConstant<T, DT>::One : ShDataTypeConstant<T, DT>::Zero;
00040 }
00041
00046 template<typename T>
00047 inline
00048 bool shDataTypeEqual(const T &a,
00049 const T &b)
00050 {
00051 return a == b;
00052 }
00053
00054
00055
00059 template<typename T>
00060 inline
00061 bool shDataTypeIsPositive(const T &a)
00062 {
00063 return a > 0;
00064 }
00065
00067
00072 template<typename T1, ShDataType DT1, typename T2, ShDataType DT2>
00073 void shDataTypeCast(typename ShDataTypeCppType<T1, DT1>::type &dest,
00074 const typename ShDataTypeCppType<T2, DT2>::type &src)
00075 {
00076 typedef typename ShDataTypeCppType<T1, DT1>::type desttype;
00077 dest = static_cast<desttype>(src);
00078 }
00079
00080
00081 }
00082
00083 #endif