forked from InsightSoftwareConsortium/ITK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
itkNumericTraitsRGBAPixel.h
123 lines (98 loc) · 3.66 KB
/
itkNumericTraitsRGBAPixel.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkNumericTraitsRGBAPixel.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __itkNumericTraitsRGBAPixel_h
#define __itkNumericTraitsRGBAPixel_h
#include "itkNumericTraits.h"
#include "itkRGBAPixel.h"
namespace itk
{
/** \class NumericTraits<RGBAPixel< T > >
* \brief Define numeric traits for RGBAPixel.
*
* We provide here a generic implementation based on creating types of
* RGBAPixel whose components are the types of the NumericTraits from
* the original RGBAPixel components. This implementation require
* support for partial specializations, since it is based on the
* concept that:
* NumericTraits<RGBAPixel< T > > is defined piecewise by
* RGBAPixel< NumericTraits< T > >
*
* \sa NumericTraits
* \ingroup DataRepresentation
*/
template < typename T >
class NumericTraits<RGBAPixel< T > >
{
private:
typedef typename NumericTraits<T>::AbsType ElementAbsType;
typedef typename NumericTraits<T>::AccumulateType ElementAccumulateType;
typedef typename NumericTraits<T>::FloatType ElementFloatType;
typedef typename NumericTraits<T>::PrintType ElementPrintType;
typedef typename NumericTraits<T>::RealType ElementRealType;
public:
/** Return the type of the native component type. */
typedef T ValueType;
typedef RGBAPixel<T> Self;
/** Unsigned component type */
typedef RGBAPixel<ElementAbsType> AbsType;
/** Accumulation of addition and multiplication. */
typedef RGBAPixel<ElementAccumulateType> AccumulateType;
/** Typedef for operations that use floating point instead of real precision */
typedef RGBAPixel<ElementFloatType> FloatType;
/** Return the type that can be printed. */
typedef RGBAPixel<ElementPrintType> PrintType;
/** Type for real-valued scalar operations. */
typedef RGBAPixel<ElementRealType> RealType;
/** Type for real-valued scalar operations. */
typedef ElementRealType ScalarRealType;
/** Component wise defined elements
*
* \note minimum value for floating pointer types is defined as
* minimum positive normalize value.
*/
static const Self max( const Self & )
{
return Self( NumericTraits< T >::max() );
}
static const Self min( const Self & )
{
return Self( NumericTraits< T >::min() );
}
static const Self max()
{
return Self( NumericTraits< T >::max() );
}
static const Self min()
{
return Self( NumericTraits< T >::min() );
}
static const Self NonpositiveMin()
{
return Self ( NumericTraits< ValueType >::NonpositiveMin() );
}
static const Self ZeroValue()
{
return Self( NumericTraits< T >::Zero );
}
static const Self OneValue()
{
return Self( NumericTraits< T >::One );
}
/** \note: the functions are prefered over the member variables as
* they are defined for all partial specialization
*/
static const Self ITKCommon_EXPORT Zero;
static const Self ITKCommon_EXPORT One;
};
} // end namespace itk
#endif // __itkNumericTraitsRGBAPixel_h