TransposeFlag.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_CONSTRAINTS_TRANSPOSEFLAG_H_
36 #define _BLAZE_MATH_CONSTRAINTS_TRANSPOSEFLAG_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
46 #include <blaze/util/Suffix.h>
47 
48 
49 namespace blaze {
50 
51 //=================================================================================================
52 //
53 // MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG CONSTRAINT
54 //
55 //=================================================================================================
56 
57 //*************************************************************************************************
67 template< bool > struct CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG_FAILED;
68 template<> struct CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG_FAILED<true> { enum { value = 1 }; };
70 //*************************************************************************************************
71 
72 
73 //*************************************************************************************************
81 #define BLAZE_CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG(T,TF) \
82  typedef \
83  blaze::CONSTRAINT_TEST< \
84  blaze::CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG_FAILED< \
85  blaze::IsVector<T>::value && \
86  blaze::TransposeFlag<T>::value == TF >::value > \
87  BLAZE_JOIN( CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG_TYPEDEF, __LINE__ )
88 //*************************************************************************************************
89 
90 
91 
92 
93 //=================================================================================================
94 //
95 // VECTORS_MUST_HAVE_SAME_TRANSPOSE_FLAG CONSTRAINT
96 //
97 //=================================================================================================
98 
99 //*************************************************************************************************
109 template< bool > struct CONSTRAINT_VECTORS_MUST_HAVE_SAME_TRANSPOSE_FLAG_FAILED;
110 template<> struct CONSTRAINT_VECTORS_MUST_HAVE_SAME_TRANSPOSE_FLAG_FAILED<true> { enum { value = 1 }; };
112 //*************************************************************************************************
113 
114 
115 //*************************************************************************************************
122 #define BLAZE_CONSTRAINT_VECTORS_MUST_HAVE_SAME_TRANSPOSE_FLAG(T1,T2) \
123  typedef \
124  blaze::CONSTRAINT_TEST< \
125  blaze::CONSTRAINT_VECTORS_MUST_HAVE_SAME_TRANSPOSE_FLAG_FAILED< \
126  blaze::IsVector<T1>::value && \
127  blaze::IsVector<T2>::value && \
128  blaze::TransposeFlag<T1>::value == blaze::TransposeFlag<T2>::value >::value > \
129  BLAZE_JOIN( CONSTRAINT_VECTORS_MUST_HAVE_SAME_TRANSPOSE_FLAG_TYPEDEF, __LINE__ )
130 //*************************************************************************************************
131 
132 
133 
134 
135 //=================================================================================================
136 //
137 // VECTORS_MUST_HAVE_DIFFERENT_TRANSPOSE_FLAG CONSTRAINT
138 //
139 //=================================================================================================
140 
141 //*************************************************************************************************
151 template< bool > struct CONSTRAINT_VECTORS_MUST_HAVE_DIFFERENT_TRANSPOSE_FLAG_FAILED;
152 template<> struct CONSTRAINT_VECTORS_MUST_HAVE_DIFFERENT_TRANSPOSE_FLAG_FAILED<true> { enum { value = 1 }; };
154 //*************************************************************************************************
155 
156 
157 //*************************************************************************************************
164 #define BLAZE_CONSTRAINT_VECTORS_MUST_HAVE_DIFFERENT_TRANSPOSE_FLAG(T1,T2) \
165  typedef \
166  blaze::CONSTRAINT_TEST< \
167  blaze::CONSTRAINT_VECTORS_MUST_HAVE_DIFFERENT_TRANSPOSE_FLAG_FAILED< \
168  blaze::IsVector<T1>::value && \
169  blaze::IsVector<T2>::value && \
170  blaze::TransposeFlag<T1>::value != blaze::TransposeFlag<T2>::value >::value > \
171  BLAZE_JOIN( CONSTRAINT_VECTORS_MUST_HAVE_DIFFERENT_TRANSPOSE_FLAG_TYPEDEF, __LINE__ )
172 //*************************************************************************************************
173 
174 } // namespace blaze
175 
176 #endif
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the TransposeFlag type trait.
Header file for the IsVector type trait.
Constraint wrapper class.
Header file for compile time constraints.