IsGeneral.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_TYPETRAITS_ISGENERAL_H_
36 #define _BLAZE_MATH_TYPETRAITS_ISGENERAL_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
46 #include <blaze/util/FalseType.h>
47 #include <blaze/util/SelectType.h>
48 #include <blaze/util/TrueType.h>
49 
50 
51 namespace blaze {
52 
53 //=================================================================================================
54 //
55 // CLASS DEFINITION
56 //
57 //=================================================================================================
58 
59 //*************************************************************************************************
64 template< typename T >
65 struct IsGeneralHelper
66 {
67  //**********************************************************************************************
68  enum { value = !IsSymmetric<T>::value && !IsHermitian<T>::value && !IsTriangular<T>::value };
69  typedef typename SelectType<value,TrueType,FalseType>::Type Type;
70  //**********************************************************************************************
71 };
73 //*************************************************************************************************
74 
75 
76 //*************************************************************************************************
106 template< typename T >
107 struct IsGeneral : public IsGeneralHelper<T>::Type
108 {
109  public:
110  //**********************************************************************************************
112  enum { value = IsGeneralHelper<T>::value };
113  typedef typename IsGeneralHelper<T>::Type Type;
115  //**********************************************************************************************
116 };
117 //*************************************************************************************************
118 
119 
120 //*************************************************************************************************
125 template< typename T >
126 struct IsGeneral< const T > : public IsGeneral<T>::Type
127 {
128  public:
129  //**********************************************************************************************
130  enum { value = IsGeneral<T>::value };
131  typedef typename IsGeneral<T>::Type Type;
132  //**********************************************************************************************
133 };
135 //*************************************************************************************************
136 
137 
138 //*************************************************************************************************
143 template< typename T >
144 struct IsGeneral< volatile T > : public IsGeneral<T>::Type
145 {
146  public:
147  //**********************************************************************************************
148  enum { value = IsGeneral<T>::value };
149  typedef typename IsGeneral<T>::Type Type;
150  //**********************************************************************************************
151 };
153 //*************************************************************************************************
154 
155 
156 //*************************************************************************************************
161 template< typename T >
162 struct IsGeneral< const volatile T > : public IsGeneral<T>::Type
163 {
164  public:
165  //**********************************************************************************************
166  enum { value = IsGeneral<T>::value };
167  typedef typename IsGeneral<T>::Type Type;
168  //**********************************************************************************************
169 };
171 //*************************************************************************************************
172 
173 } // namespace blaze
174 
175 #endif
Header file for the FalseType type/value trait base class.
Header file for the IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the IsTriangular type trait.
Header file for the SelectType class template.
Compile time check for general matrices.This type trait tests whether or not the given template param...
Definition: IsGeneral.h:107
Header file for the IsHermitian type trait.
Header file for the TrueType type/value trait base class.