00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkNumericTraitsRGBAPixel_h
00018 #define __itkNumericTraitsRGBAPixel_h
00019
00020 #include "itkNumericTraits.h"
00021 #include "itkRGBAPixel.h"
00022
00023
00024 namespace itk
00025 {
00026
00027
00028
00029
00030
00031
00032 #define itkNumericTraitsRGBAPixelMacro(T) \
00033 template < _TEMPLATE_ARGUMENT_ > \
00034 class NumericTraits<RGBAPixel< T > > \
00035 { \
00036 public: \
00037 typedef T ValueType; \
00038 \
00039 typedef _TYPENAME_ NumericTraits<T>::AbsType ElementAbsType; \
00040 typedef _TYPENAME_ NumericTraits<T>::AccumulateType ElementAccumulateType; \
00041 typedef _TYPENAME_ NumericTraits<T>::FloatType ElementFloatType; \
00042 typedef _TYPENAME_ NumericTraits<T>::PrintType ElementPrintType; \
00043 typedef _TYPENAME_ NumericTraits<T>::RealType ElementRealType; \
00044 \
00045 typedef RGBAPixel<T> Self; \
00046 \
00047 typedef RGBAPixel<ElementAbsType> AbsType; \
00048 typedef RGBAPixel<ElementAccumulateType> AccumulateType; \
00049 typedef RGBAPixel<ElementFloatType> FloatType; \
00050 typedef Self PrintType; \
00051 typedef RGBAPixel<ElementRealType> RealType; \
00052 \
00053 typedef ElementRealType ScalarRealType; \
00054 \
00055 static const RealType max( const Self & a ) \
00056 { \
00057 RealType b; \
00058 b.Fill( NumericTraits< T >::max() ); \
00059 return b; \
00060 } \
00061 static const RealType min( const Self & a ) \
00062 { \
00063 RealType b; \
00064 b.Fill( NumericTraits< T >::min() ); \
00065 return b; \
00066 } \
00067 static const Self max() \
00068 { \
00069 Self b; \
00070 b.Fill( NumericTraits< T >::max() ); \
00071 return b; \
00072 } \
00073 static const Self min() \
00074 { \
00075 Self b; \
00076 b.Fill( NumericTraits< T >::min() ); \
00077 return b; \
00078 } \
00079 static const Self NonpositiveMin() \
00080 { \
00081 return NumericTraits< Self >::min(); \
00082 } \
00083 static const Self ZeroValue() \
00084 { \
00085 Self b; \
00086 b.Fill( NumericTraits< T >::Zero ); \
00087 return b; \
00088 } \
00089 static const Self OneValue() \
00090 { \
00091 Self b; \
00092 b.Fill( NumericTraits< T >::One ); \
00093 return b; \
00094 } \
00095 static const Self ITKCommon_EXPORT Zero; \
00096 static const Self ITKCommon_EXPORT One; \
00097 };
00098
00099
00100
00101
00102
00103
00104
00105
00106 #if defined( _MSC_VER ) && ( _MSC_VER < 1310 )
00107
00108
00109 #define _TYPENAME_
00110 #define _TEMPLATE_ARGUMENT_
00111
00112
00113
00114
00115 itkNumericTraitsRGBAPixelMacro( char );
00116 itkNumericTraitsRGBAPixelMacro( unsigned char );
00117 itkNumericTraitsRGBAPixelMacro( short );
00118 itkNumericTraitsRGBAPixelMacro( unsigned short );
00119 itkNumericTraitsRGBAPixelMacro( int );
00120 itkNumericTraitsRGBAPixelMacro( unsigned int );
00121 itkNumericTraitsRGBAPixelMacro( long );
00122 itkNumericTraitsRGBAPixelMacro( unsigned long );
00123 itkNumericTraitsRGBAPixelMacro( float );
00124 itkNumericTraitsRGBAPixelMacro( double );
00125
00126 #else
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140 #define _TYPENAME_ typename
00141 #define _TEMPLATE_ARGUMENT_ class T
00142
00143
00144
00145
00146 itkNumericTraitsRGBAPixelMacro( T );
00147
00148 #endif
00149
00150
00151
00152
00153
00154 #undef _TYPENAME_
00155 #undef _TEMPLATE_ARGUMENT_
00156
00157
00158 }
00159
00160 #endif // __itkNumericTraitsRGBAPixel_h
00161