MatVecMultExpr.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_CONSTRAINTS_MATVECMULTEXPR_H_
36 #define _BLAZE_MATH_CONSTRAINTS_MATVECMULTEXPR_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
49 #include <blaze/util/mpl/And.h>
50 #include <blaze/util/mpl/Equal.h>
51 #include <blaze/util/mpl/Not.h>
52 #include <blaze/util/mpl/Or.h>
53 #include <blaze/util/mpl/SizeT.h>
54 #include <blaze/util/Suffix.h>
55 
56 
57 namespace blaze {
58 
59 //=================================================================================================
60 //
61 // MUST_BE_MATVECMULTEXPR_TYPE CONSTRAINT
62 //
63 //=================================================================================================
64 
65 //*************************************************************************************************
75 template< bool > struct CONSTRAINT_MUST_BE_MATVECMULTEXPR_TYPE_FAILED;
76 template<> struct CONSTRAINT_MUST_BE_MATVECMULTEXPR_TYPE_FAILED<true> { enum { value = 1 }; };
78 //*************************************************************************************************
79 
80 
81 //*************************************************************************************************
88 #define BLAZE_CONSTRAINT_MUST_BE_MATVECMULTEXPR_TYPE(T) \
89  typedef \
90  blaze::CONSTRAINT_TEST< \
91  blaze::CONSTRAINT_MUST_BE_MATVECMULTEXPR_TYPE_FAILED< blaze::IsMatVecMultExpr<T>::value >::value > \
92  BLAZE_JOIN( CONSTRAINT_MUST_BE_MATVECMULTEXPR_TYPE_TYPEDEF, __LINE__ )
93 //*************************************************************************************************
94 
95 
96 
97 
98 //=================================================================================================
99 //
100 // MUST_NOT_BE_MATVECMULTEXPR_TYPE CONSTRAINT
101 //
102 //=================================================================================================
103 
104 //*************************************************************************************************
114 template< bool > struct CONSTRAINT_MUST_NOT_BE_MATVECMULTEXPR_TYPE_FAILED;
115 template<> struct CONSTRAINT_MUST_NOT_BE_MATVECMULTEXPR_TYPE_FAILED<true> { enum { value = 1 }; };
117 //*************************************************************************************************
118 
119 
120 //*************************************************************************************************
127 #define BLAZE_CONSTRAINT_MUST_NOT_BE_MATVECMULTEXPR_TYPE(T) \
128  typedef \
129  blaze::CONSTRAINT_TEST< \
130  blaze::CONSTRAINT_MUST_NOT_BE_MATVECMULTEXPR_TYPE_FAILED< !blaze::IsMatVecMultExpr<T>::value >::value > \
131  BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_MATVECMULTEXPR_TYPE_TYPEDEF, __LINE__ )
132 //*************************************************************************************************
133 
134 
135 
136 
137 //=================================================================================================
138 //
139 // MUST_FORM_VALID_MATVECMULTEXPR CONSTRAINT
140 //
141 //=================================================================================================
142 
143 //*************************************************************************************************
153 template< bool > struct CONSTRAINT_MUST_FORM_VALID_MATVECMULTEXPR_FAILED;
154 template<> struct CONSTRAINT_MUST_FORM_VALID_MATVECMULTEXPR_FAILED<true> { enum { value = 1 }; };
156 //*************************************************************************************************
157 
158 
159 //*************************************************************************************************
166 #define BLAZE_CONSTRAINT_MUST_FORM_VALID_MATVECMULTEXPR(T1,T2) \
167  typedef \
168  blaze::CONSTRAINT_TEST< \
169  blaze::CONSTRAINT_MUST_FORM_VALID_MATVECMULTEXPR_FAILED< ( \
170  blaze::And< blaze::IsMatrix<T1> \
171  , blaze::IsColumnVector<T2> \
172  , blaze::Or< blaze::Equal< blaze::Columns<T1>, blaze::SizeT<0UL> > \
173  , blaze::Equal< blaze::Size<T2>, blaze::SizeT<0UL> > \
174  , blaze::Equal< blaze::Columns<T1>, blaze::Size<T2> > > \
175  >::value ) >::value > \
176  BLAZE_JOIN( CONSTRAINT_MUST_FORM_VALID_MATVECMULTEXPR_TYPEDEF, __LINE__ )
177 //*************************************************************************************************
178 
179 
180 
181 
182 //=================================================================================================
183 //
184 // MUST_NOT_FORM_VALID_MATVECMULTEXPR CONSTRAINT
185 //
186 //=================================================================================================
187 
188 //*************************************************************************************************
198 template< bool > struct CONSTRAINT_MUST_NOT_FORM_VALID_MATVECMULTEXPR_FAILED;
199 template<> struct CONSTRAINT_MUST_NOT_FORM_VALID_MATVECMULTEXPR_FAILED<true> { enum { value = 1 }; };
201 //*************************************************************************************************
202 
203 
204 //*************************************************************************************************
211 #define BLAZE_CONSTRAINT_MUST_NOT_FORM_VALID_MATVECMULTEXPR(T1,T2) \
212  typedef \
213  blaze::CONSTRAINT_TEST< \
214  blaze::CONSTRAINT_MUST_NOT_FORM_VALID_MATVECMULTEXPR_FAILED< ( \
215  blaze::Not< blaze::And< blaze::IsMatrix<T1> \
216  , blaze::IsColumnVector<T2> \
217  , blaze::Or< blaze::Equal< blaze::Columns<T1>, blaze::SizeT<0UL> > \
218  , blaze::Equal< blaze::Size<T2>, blaze::SizeT<0UL> > \
219  , blaze::Equal< blaze::Columns<T1>, blaze::Size<T2> > > > \
220  >::value ) >::value > \
221  BLAZE_JOIN( CONSTRAINT_MUST_NOT_FORM_VALID_MATVECMULTEXPR_TYPEDEF, __LINE__ )
222 //*************************************************************************************************
223 
224 } // namespace blaze
225 
226 #endif
Header file for the And class template.
Header file for the SizeT class template.
Header file for the IsMatVecMultExpr type trait class.
Header file for the IsMatrix type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the Or class template.
Header file for the Columns type trait.
Header file for the Not class template.
Constraint wrapper class.
Header file for the IsColumnVector type trait.
Header file for the Size type trait.
Header file for compile time constraints.
Header file for the Equal class template.