All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
StorageOrder.h
Go to the documentation of this file.
1 //=================================================================================================
20 //=================================================================================================
21 
22 #ifndef _BLAZE_MATH_CONSTRAINTS_STORAGEORDER_H_
23 #define _BLAZE_MATH_CONSTRAINTS_STORAGEORDER_H_
24 
25 
26 //*************************************************************************************************
27 // Includes
28 //*************************************************************************************************
29 
34 #include <blaze/util/Suffix.h>
35 
36 
37 namespace blaze {
38 
39 //=================================================================================================
40 //
41 // MUST_BE_ROW_MAJOR_MATRIX_TYPE CONSTRAINT
42 //
43 //=================================================================================================
44 
45 //*************************************************************************************************
55 template< bool > struct CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE_FAILED;
56 template<> struct CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE_FAILED<true> { enum { value = 1 }; };
58 //*************************************************************************************************
59 
60 
61 //*************************************************************************************************
68 #define BLAZE_CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE(T) \
69  typedef \
70  blaze::CONSTRAINT_TEST< \
71  blaze::CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE_FAILED< \
72  blaze::IsRowMajorMatrix<T>::value >::value > \
73  BLAZE_JOIN( CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE_TYPEDEF, __LINE__ )
74 //*************************************************************************************************
75 
76 
77 
78 
79 //=================================================================================================
80 //
81 // MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE CONSTRAINT
82 //
83 //=================================================================================================
84 
85 //*************************************************************************************************
95 template< bool > struct CONSTRAINT_MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE_FAILED;
96 template<> struct CONSTRAINT_MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE_FAILED<true> { enum { value = 1 }; };
98 //*************************************************************************************************
99 
100 
101 //*************************************************************************************************
108 #define BLAZE_CONSTRAINT_MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE(T) \
109  typedef \
110  blaze::CONSTRAINT_TEST< \
111  blaze::CONSTRAINT_MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE_FAILED< \
112  !blaze::IsRowMajorMatrix<T>::value >::value \
113  BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_ROW_MAJOR_MATRIX_TYPE_TYPEDEF, __LINE__ )
114 //*************************************************************************************************
115 
116 
117 
118 
119 //=================================================================================================
120 //
121 // MUST_BE_COLUMN_MAJOR_MATRIX_TYPE CONSTRAINT
122 //
123 //=================================================================================================
124 
125 //*************************************************************************************************
135 template< bool > struct CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED;
136 template<> struct CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED<true> { enum { value = 1 }; };
138 //*************************************************************************************************
139 
140 
141 //*************************************************************************************************
148 #define BLAZE_CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE(T) \
149  typedef \
150  blaze::CONSTRAINT_TEST< \
151  blaze::CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED< \
152  blaze::IsColumnMajorMatrix<T>::value >::value > \
153  BLAZE_JOIN( CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE_TYPEDEF, __LINE__ )
154 //*************************************************************************************************
155 
156 
157 
158 
159 //=================================================================================================
160 //
161 // MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE CONSTRAINT
162 //
163 //=================================================================================================
164 
165 //*************************************************************************************************
175 template< bool > struct CONSTRAINT_MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED;
176 template<> struct CONSTRAINT_MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED<true> { enum { value = 1 }; };
178 //*************************************************************************************************
179 
180 
181 //*************************************************************************************************
188 #define BLAZE_CONSTRAINT_MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE(T) \
189  typedef \
190  blaze::CONSTRAINT_TEST< \
191  blaze::CONSTRAINT_MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE_FAILED< \
192  !blaze::IsColumnMajorMatrix<T>::value >::value > \
193  BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_COLUMN_MAJOR_MATRIX_TYPE_TYPEDEF, __LINE__ )
194 //*************************************************************************************************
195 
196 
197 
198 
199 //=================================================================================================
200 //
201 // MUST_BE_MATRIX_WITH_STORAGE_ORDER CONSTRAINT
202 //
203 //=================================================================================================
204 
205 //*************************************************************************************************
215 template< bool > struct CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER_FAILED;
216 template<> struct CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER_FAILED<true> { enum { value = 1 }; };
218 //*************************************************************************************************
219 
220 
221 //*************************************************************************************************
229 #define BLAZE_CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER(T,SO) \
230  typedef \
231  blaze::CONSTRAINT_TEST< \
232  blaze::CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER_FAILED< \
233  blaze::IsMatrix<T>::value && \
234  blaze::IsColumnMajorMatrix<T>::value == SO >::value > \
235  BLAZE_JOIN( CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER_TYPEDEF, __LINE__ )
236 //*************************************************************************************************
237 
238 
239 
240 
241 //=================================================================================================
242 //
243 // MATRICES_MUST_HAVE_SAME_STORAGE_ORDER CONSTRAINT
244 //
245 //=================================================================================================
246 
247 //*************************************************************************************************
257 template< bool > struct CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER_FAILED;
258 template<> struct CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER_FAILED<true> { enum { value = 1 }; };
260 //*************************************************************************************************
261 
262 
263 //*************************************************************************************************
270 #define BLAZE_CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER(T1,T2) \
271  typedef \
272  blaze::CONSTRAINT_TEST< \
273  blaze::CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER_FAILED< \
274  blaze::IsMatrix<T1>::value && \
275  blaze::IsMatrix<T2>::value && \
276  static_cast<int>( blaze::IsRowMajorMatrix<T1>::value ) == static_cast<int>( blaze::IsRowMajorMatrix<T2>::value ) >::value > \
277  BLAZE_JOIN( CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER_TYPEDEF, __LINE__ )
278 //*************************************************************************************************
279 
280 
281 
282 
283 //=================================================================================================
284 //
285 // MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER CONSTRAINT
286 //
287 //=================================================================================================
288 
289 //*************************************************************************************************
299 template< bool > struct CONSTRAINT_MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER_FAILED;
300 template<> struct CONSTRAINT_MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER_FAILED<true> { enum { value = 1 }; };
302 //*************************************************************************************************
303 
304 
305 //*************************************************************************************************
312 #define BLAZE_CONSTRAINT_MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER(T1,T2) \
313  typedef \
314  blaze::CONSTRAINT_TEST< \
315  blaze::CONSTRAINT_MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER_FAILED< \
316  blaze::IsMatrix<T1>::value && \
317  blaze::IsMatrix<T2>::value && \
318  static_cast<int>( blaze::IsRowMajorMatrix<T1>::value ) != static_cast<int>( blaze::IsRowMajorMatrix<T2>::value ) >::value > \
319  BLAZE_JOIN( CONSTRAINT_MATRICES_MUST_HAVE_DIFFERENT_STORAGE_ORDER_TYPEDEF, __LINE__ )
320 //*************************************************************************************************
321 
322 } // namespace blaze
323 
324 #endif