Go to the documentation of this file.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
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef __cmtkNumericTraits_h_included_
00034 #define __cmtkNumericTraits_h_included_
00035
00036 #include <cmtkconfig.h>
00037
00038 #include <Base/cmtkTypes.h>
00039 #include <Base/cmtkMathUtil.h>
00040
00041 #include <math.h>
00042
00043 namespace
00044 cmtk
00045 {
00046
00049
00051 template<class TType>
00052 class NumericTraits
00053 {
00054 public:
00056 static const TType DefaultPaddingValue;
00057
00059 static TType ConvertFromDataItem( const Types::DataItem value );
00060 };
00061
00062 template<>
00063 class NumericTraits<char>
00064 {
00065 public:
00066 static const char DefaultPaddingValue = -1;
00067
00068 static char ConvertFromDataItem( const Types::DataItem value )
00069 {
00070 using namespace std;
00071 if ( MathUtil::IsNaN( value ) )
00072 {
00073 return DefaultPaddingValue;
00074 }
00075 else
00076 {
00077 return static_cast<char>( value + 0.5 );
00078 }
00079 }
00080 };
00081
00082 template<>
00083 class NumericTraits<unsigned char>
00084 {
00085 public:
00086 static const unsigned char DefaultPaddingValue = 255;
00087
00088 static unsigned char ConvertFromDataItem( const Types::DataItem value )
00089 {
00090 using namespace std;
00091 if ( MathUtil::IsNaN( value ) )
00092 {
00093 return DefaultPaddingValue;
00094 }
00095 else
00096 {
00097 return static_cast<unsigned char>( value + 0.5 );
00098 }
00099 }
00100 };
00101
00102 template<>
00103 class NumericTraits<short>
00104 {
00105 public:
00106 static const short DefaultPaddingValue = -32768;
00107
00108 static short ConvertFromDataItem( const Types::DataItem value )
00109 {
00110 using namespace std;
00111 if ( MathUtil::IsNaN( value ) )
00112 {
00113 return DefaultPaddingValue;
00114 }
00115 else
00116 {
00117 return static_cast<short>( value + 0.5 );
00118 }
00119 }
00120 };
00121
00123
00124 }
00125
00126 #endif // #ifndef __cmtkNumericTraits_h_included_