All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
IsNumeric.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_UTIL_TYPETRAITS_ISNUMERIC_H_
36 #define _BLAZE_UTIL_TYPETRAITS_ISNUMERIC_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <blaze/util/Complex.h>
44 #include <blaze/util/FalseType.h>
45 #include <blaze/util/SelectType.h>
46 #include <blaze/util/TrueType.h>
50 
51 
52 namespace blaze {
53 
54 //=================================================================================================
55 //
56 // CLASS DEFINITION
57 //
58 //=================================================================================================
59 
60 //*************************************************************************************************
65 template< typename T >
66 struct IsNumericHelper
67 {
68  //**********************************************************************************************
69  enum { value = ( IsBuiltin<T>::value && !IsBoolean<T>::value && !IsVoid<T>::value ) };
70  typedef typename SelectType<value,TrueType,FalseType>::Type Type;
71  //**********************************************************************************************
72 };
74 //*************************************************************************************************
75 
76 
77 //*************************************************************************************************
97 template< typename T >
98 struct IsNumeric : public IsNumericHelper<T>::Type
99 {
100  public:
101  //**********************************************************************************************
103  enum { value = IsNumericHelper<T>::value };
104  typedef typename IsNumericHelper<T>::Type Type;
106  //**********************************************************************************************
107 };
108 //*************************************************************************************************
109 
110 
111 //*************************************************************************************************
113 template< typename T >
115 struct IsNumeric< complex<T> > : public IsNumeric<T>::Type
116 {
117  public:
118  //**********************************************************************************************
119  enum { value = IsNumeric<T>::value };
120  typedef typename IsNumeric<T>::Type Type;
121  //**********************************************************************************************
122 };
124 //*************************************************************************************************
125 
126 
127 //*************************************************************************************************
129 template< typename T >
131 struct IsNumeric< const complex<T> > : public IsNumeric<T>::Type
132 {
133  public:
134  //**********************************************************************************************
135  enum { value = IsNumeric<T>::value };
136  typedef typename IsNumeric<T>::Type Type;
137  //**********************************************************************************************
138 };
140 //*************************************************************************************************
141 
142 
143 //*************************************************************************************************
145 template< typename T >
147 struct IsNumeric< volatile complex<T> > : public IsNumeric<T>::Type
148 {
149  public:
150  //**********************************************************************************************
151  enum { value = IsNumeric<T>::value };
152  typedef typename IsNumeric<T>::Type Type;
153  //**********************************************************************************************
154 };
156 //*************************************************************************************************
157 
158 
159 //*************************************************************************************************
161 template< typename T >
163 struct IsNumeric< const volatile complex<T> > : public IsNumeric<T>::Type
164 {
165  public:
166  //**********************************************************************************************
167  enum { value = IsNumeric<T>::value };
168  typedef typename IsNumeric<T>::Type Type;
169  //**********************************************************************************************
170 };
172 //*************************************************************************************************
173 
174 } // namespace blaze
175 
176 #endif
Compile time check for numeric types.This type trait tests whether or not the given template paramete...
Definition: IsNumeric.h:98
Header file for the FalseType type/value trait base class.
Header file for the IsVoid type trait.
Header file for the IsBoolean type trait.
Header file for the SelectType class template.
Header file for the IsBuiltin type trait.
Header file for the complex data type.
Header file for the TrueType type/value trait base class.