All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
StorageOrder.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_CONSTRAINTS_STORAGEORDER_H_
36 #define _BLAZE_MATH_CONSTRAINTS_STORAGEORDER_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
47 #include <blaze/util/Suffix.h>
48 
49 
50 namespace blaze {
51 
52 //=================================================================================================
53 //
54 // MUST_BE_ROW_MAJOR_MATRIX_TYPE CONSTRAINT
55 //
56 //=================================================================================================
57 
58 //*************************************************************************************************
68 template< bool > struct CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE_FAILED;
69 template<> struct CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE_FAILED<true> { enum { value = 1 }; };
71 //*************************************************************************************************
72 
73 
74 //*************************************************************************************************
81 #define BLAZE_CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE(T) \
82  typedef \
83  blaze::CONSTRAINT_TEST< \
84  blaze::CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE_FAILED< \
85  blaze::IsRowMajorMatrix<T>::value >::value > \
86  BLAZE_JOIN( CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE_TYPEDEF, __LINE__ )
87 //*************************************************************************************************
88 
89 
90 
91 
92 //=================================================================================================
93 //
94 // MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE CONSTRAINT
95 //
96 //=================================================================================================
97 
98 //*************************************************************************************************
108 template< bool > struct CONSTRAINT_MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE_FAILED;
109 template<> struct CONSTRAINT_MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE_FAILED<true> { enum { value = 1 }; };
111 //*************************************************************************************************
112 
113 
114 //*************************************************************************************************
121 #define BLAZE_CONSTRAINT_MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE(T) \
122  typedef \
123  blaze::CONSTRAINT_TEST< \
124  blaze::CONSTRAINT_MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE_FAILED< \
125  !blaze::IsRowMajorMatrix<T>::value >::value \
126  BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE_TYPEDEF, __LINE__ )
127 //*************************************************************************************************
128 
129 
130 
131 
132 //=================================================================================================
133 //
134 // MUST_BE_COLUMN_MAJOR_MATRIX_TYPE CONSTRAINT
135 //
136 //=================================================================================================
137 
138 //*************************************************************************************************
148 template< bool > struct CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED;
149 template<> struct CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED<true> { enum { value = 1 }; };
151 //*************************************************************************************************
152 
153 
154 //*************************************************************************************************
161 #define BLAZE_CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE(T) \
162  typedef \
163  blaze::CONSTRAINT_TEST< \
164  blaze::CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED< \
165  blaze::IsColumnMajorMatrix<T>::value >::value > \
166  BLAZE_JOIN( CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE_TYPEDEF, __LINE__ )
167 //*************************************************************************************************
168 
169 
170 
171 
172 //=================================================================================================
173 //
174 // MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE CONSTRAINT
175 //
176 //=================================================================================================
177 
178 //*************************************************************************************************
188 template< bool > struct CONSTRAINT_MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED;
189 template<> struct CONSTRAINT_MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED<true> { enum { value = 1 }; };
191 //*************************************************************************************************
192 
193 
194 //*************************************************************************************************
201 #define BLAZE_CONSTRAINT_MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE(T) \
202  typedef \
203  blaze::CONSTRAINT_TEST< \
204  blaze::CONSTRAINT_MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED< \
205  !blaze::IsColumnMajorMatrix<T>::value >::value > \
206  BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE_TYPEDEF, __LINE__ )
207 //*************************************************************************************************
208 
209 
210 
211 
212 //=================================================================================================
213 //
214 // MUST_BE_MATRIX_WITH_STORAGE_ORDER CONSTRAINT
215 //
216 //=================================================================================================
217 
218 //*************************************************************************************************
228 template< bool > struct CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER_FAILED;
229 template<> struct CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER_FAILED<true> { enum { value = 1 }; };
231 //*************************************************************************************************
232 
233 
234 //*************************************************************************************************
242 #define BLAZE_CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER(T,SO) \
243  typedef \
244  blaze::CONSTRAINT_TEST< \
245  blaze::CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER_FAILED< \
246  blaze::IsMatrix<T>::value && \
247  blaze::IsColumnMajorMatrix<T>::value == SO >::value > \
248  BLAZE_JOIN( CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER_TYPEDEF, __LINE__ )
249 //*************************************************************************************************
250 
251 
252 
253 
254 //=================================================================================================
255 //
256 // MATRICES_MUST_HAVE_SAME_STORAGE_ORDER CONSTRAINT
257 //
258 //=================================================================================================
259 
260 //*************************************************************************************************
270 template< bool > struct CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER_FAILED;
271 template<> struct CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER_FAILED<true> { enum { value = 1 }; };
273 //*************************************************************************************************
274 
275 
276 //*************************************************************************************************
283 #define BLAZE_CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER(T1,T2) \
284  typedef \
285  blaze::CONSTRAINT_TEST< \
286  blaze::CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER_FAILED< \
287  blaze::IsMatrix<T1>::value && \
288  blaze::IsMatrix<T2>::value && \
289  static_cast<int>( blaze::IsRowMajorMatrix<T1>::value ) == static_cast<int>( blaze::IsRowMajorMatrix<T2>::value ) >::value > \
290  BLAZE_JOIN( CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER_TYPEDEF, __LINE__ )
291 //*************************************************************************************************
292 
293 
294 
295 
296 //=================================================================================================
297 //
298 // MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER CONSTRAINT
299 //
300 //=================================================================================================
301 
302 //*************************************************************************************************
312 template< bool > struct CONSTRAINT_MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER_FAILED;
313 template<> struct CONSTRAINT_MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER_FAILED<true> { enum { value = 1 }; };
315 //*************************************************************************************************
316 
317 
318 //*************************************************************************************************
325 #define BLAZE_CONSTRAINT_MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER(T1,T2) \
326  typedef \
327  blaze::CONSTRAINT_TEST< \
328  blaze::CONSTRAINT_MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER_FAILED< \
329  blaze::IsMatrix<T1>::value && \
330  blaze::IsMatrix<T2>::value && \
331  static_cast<int>( blaze::IsRowMajorMatrix<T1>::value ) != static_cast<int>( blaze::IsRowMajorMatrix<T2>::value ) >::value > \
332  BLAZE_JOIN( CONSTRAINT_MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER_TYPEDEF, __LINE__ )
333 //*************************************************************************************************
334 
335 } // namespace blaze
336 
337 #endif
Header file for the IsColumnMajorMatrix type trait.
Header file for the IsMatrix type trait.
Constraint wrapper class.
Header file for the IsRowMajorMatrix type trait.
Header file for compile time constraints.