All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
IsNumeric.h
Go to the documentation of this file.
1 //=================================================================================================
20 //=================================================================================================
21 
22 #ifndef _BLAZE_UTIL_TYPETRAITS_ISNUMERIC_H_
23 #define _BLAZE_UTIL_TYPETRAITS_ISNUMERIC_H_
24 
25 
26 //*************************************************************************************************
27 // Includes
28 //*************************************************************************************************
29 
30 #include <blaze/util/Complex.h>
31 #include <blaze/util/FalseType.h>
32 #include <blaze/util/SelectType.h>
33 #include <blaze/util/TrueType.h>
37 
38 
39 namespace blaze {
40 
41 //=================================================================================================
42 //
43 // CLASS DEFINITION
44 //
45 //=================================================================================================
46 
47 //*************************************************************************************************
52 template< typename T >
53 struct IsNumericHelper
54 {
55  //**********************************************************************************************
56  enum { value = ( IsBuiltin<T>::value && !IsBoolean<T>::value && !IsVoid<T>::value ) };
57  typedef typename SelectType<value,TrueType,FalseType>::Type Type;
58  //**********************************************************************************************
59 };
61 //*************************************************************************************************
62 
63 
64 //*************************************************************************************************
84 template< typename T >
85 struct IsNumeric : public IsNumericHelper<T>::Type
86 {
87  public:
88  //**********************************************************************************************
90  enum { value = IsNumericHelper<T>::value };
91  typedef typename IsNumericHelper<T>::Type Type;
93  //**********************************************************************************************
94 };
95 //*************************************************************************************************
96 
97 
98 //*************************************************************************************************
100 
101 template< typename T >
102 struct IsNumeric< complex<T> > : public IsNumeric<T>::Type
103 {
104  public:
105  //**********************************************************************************************
106  enum { value = IsNumeric<T>::value };
107  typedef typename IsNumeric<T>::Type Type;
108  //**********************************************************************************************
109 };
111 //*************************************************************************************************
112 
113 
114 //*************************************************************************************************
116 
117 template< typename T >
118 struct IsNumeric< const complex<T> > : public IsNumeric<T>::Type
119 {
120  public:
121  //**********************************************************************************************
122  enum { value = IsNumeric<T>::value };
123  typedef typename IsNumeric<T>::Type Type;
124  //**********************************************************************************************
125 };
127 //*************************************************************************************************
128 
129 
130 //*************************************************************************************************
132 
133 template< typename T >
134 struct IsNumeric< volatile complex<T> > : public IsNumeric<T>::Type
135 {
136  public:
137  //**********************************************************************************************
138  enum { value = IsNumeric<T>::value };
139  typedef typename IsNumeric<T>::Type Type;
140  //**********************************************************************************************
141 };
143 //*************************************************************************************************
144 
145 
146 //*************************************************************************************************
148 
149 template< typename T >
150 struct IsNumeric< const volatile complex<T> > : public IsNumeric<T>::Type
151 {
152  public:
153  //**********************************************************************************************
154  enum { value = IsNumeric<T>::value };
155  typedef typename IsNumeric<T>::Type Type;
156  //**********************************************************************************************
157 };
159 //*************************************************************************************************
160 
161 } // namespace blaze
162 
163 #endif