All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MatMatAddExpr.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_CONSTRAINTS_MATMATADDEXPR_H_
36 #define _BLAZE_MATH_CONSTRAINTS_MATMATADDEXPR_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
48 #include <blaze/util/mpl/And.h>
49 #include <blaze/util/mpl/Equal.h>
50 #include <blaze/util/mpl/Not.h>
51 #include <blaze/util/mpl/Or.h>
52 #include <blaze/util/mpl/SizeT.h>
53 #include <blaze/util/Suffix.h>
54 
55 
56 namespace blaze {
57 
58 //=================================================================================================
59 //
60 // MUST_BE_MATMATADDEXPR_TYPE CONSTRAINT
61 //
62 //=================================================================================================
63 
64 //*************************************************************************************************
74 template< bool > struct CONSTRAINT_MUST_BE_MATMATADDEXPR_TYPE_FAILED;
75 template<> struct CONSTRAINT_MUST_BE_MATMATADDEXPR_TYPE_FAILED<true> { enum { value = 1 }; };
77 //*************************************************************************************************
78 
79 
80 //*************************************************************************************************
87 #define BLAZE_CONSTRAINT_MUST_BE_MATMATADDEXPR_TYPE(T) \
88  typedef \
89  blaze::CONSTRAINT_TEST< \
90  blaze::CONSTRAINT_MUST_BE_MATMATADDEXPR_TYPE_FAILED< blaze::IsMatMatAddExpr<T>::value >::value > \
91  BLAZE_JOIN( CONSTRAINT_MUST_BE_MATMATADDEXPR_TYPE_TYPEDEF, __LINE__ )
92 //*************************************************************************************************
93 
94 
95 
96 
97 //=================================================================================================
98 //
99 // MUST_NOT_BE_MATMATADDEXPR_TYPE CONSTRAINT
100 //
101 //=================================================================================================
102 
103 //*************************************************************************************************
113 template< bool > struct CONSTRAINT_MUST_NOT_BE_MATMATADDEXPR_TYPE_FAILED;
114 template<> struct CONSTRAINT_MUST_NOT_BE_MATMATADDEXPR_TYPE_FAILED<true> { enum { value = 1 }; };
116 //*************************************************************************************************
117 
118 
119 //*************************************************************************************************
126 #define BLAZE_CONSTRAINT_MUST_NOT_BE_MATMATADDEXPR_TYPE(T) \
127  typedef \
128  blaze::CONSTRAINT_TEST< \
129  blaze::CONSTRAINT_MUST_NOT_BE_MATMATADDEXPR_TYPE_FAILED< !blaze::IsMatMatAddExpr<T>::value >::value > \
130  BLAZE_JOIN( CONSTRAINT_MUST_NOT_BE_MATMATADDEXPR_TYPE_TYPEDEF, __LINE__ )
131 //*************************************************************************************************
132 
133 
134 
135 
136 //=================================================================================================
137 //
138 // MUST_FORM_VALID_MATMATADDEXPR CONSTRAINT
139 //
140 //=================================================================================================
141 
142 //*************************************************************************************************
152 template< bool > struct CONSTRAINT_MUST_FORM_VALID_MATMATADDEXPR_FAILED;
153 template<> struct CONSTRAINT_MUST_FORM_VALID_MATMATADDEXPR_FAILED<true> { enum { value = 1 }; };
155 //*************************************************************************************************
156 
157 
158 //*************************************************************************************************
165 #define BLAZE_CONSTRAINT_MUST_FORM_VALID_MATMATADDEXPR(T1,T2) \
166  typedef \
167  blaze::CONSTRAINT_TEST< \
168  blaze::CONSTRAINT_MUST_FORM_VALID_MATMATADDEXPR_FAILED< ( \
169  blaze::And< blaze::IsMatrix<T1> \
170  , blaze::IsMatrix<T2> \
171  , blaze::Or< blaze::Equal< blaze::Rows<T1>, blaze::SizeT<0UL> > \
172  , blaze::Equal< blaze::Rows<T2>, blaze::SizeT<0UL> > \
173  , blaze::Equal< blaze::Rows<T1>, blaze::Rows<T2> > > \
174  , blaze::Or< blaze::Equal< blaze::Columns<T1>, blaze::SizeT<0UL> > \
175  , blaze::Equal< blaze::Columns<T2>, blaze::SizeT<0UL> > \
176  , blaze::Equal< blaze::Columns<T1>, blaze::Columns<T2> > > \
177  >::value ) >::value > \
178  BLAZE_JOIN( CONSTRAINT_MUST_FORM_VALID_MATMATADDEXPR_TYPEDEF, __LINE__ )
179 //*************************************************************************************************
180 
181 
182 
183 
184 //=================================================================================================
185 //
186 // MUST_NOT_FORM_VALID_MATMATADDEXPR CONSTRAINT
187 //
188 //=================================================================================================
189 
190 //*************************************************************************************************
200 template< bool > struct CONSTRAINT_MUST_NOT_FORM_VALID_MATMATADDEXPR_FAILED;
201 template<> struct CONSTRAINT_MUST_NOT_FORM_VALID_MATMATADDEXPR_FAILED<true> { enum { value = 1 }; };
203 //*************************************************************************************************
204 
205 
206 //*************************************************************************************************
213 #define BLAZE_CONSTRAINT_MUST_NOT_FORM_VALID_MATMATADDEXPR(T1,T2) \
214  typedef \
215  blaze::CONSTRAINT_TEST< \
216  blaze::CONSTRAINT_MUST_NOT_FORM_VALID_MATMATADDEXPR_FAILED< ( \
217  blaze::Not< blaze::And< blaze::IsMatrix<T1> \
218  , blaze::IsMatrix<T2> \
219  , blaze::Or< blaze::Equal< blaze::Rows<T1>, blaze::SizeT<0UL> > \
220  , blaze::Equal< blaze::Rows<T2>, blaze::SizeT<0UL> > \
221  , blaze::Equal< blaze::Rows<T1>, blaze::Rows<T2> > > \
222  , blaze::Or< blaze::Equal< blaze::Columns<T1>, blaze::SizeT<0UL> > \
223  , blaze::Equal< blaze::Columns<T2>, blaze::SizeT<0UL> > \
224  , blaze::Equal< blaze::Columns<T1>, blaze::Columns<T2> > > > \
225  >::value ) >::value > \
226  BLAZE_JOIN( CONSTRAINT_MUST_NOT_FORM_VALID_MATMATADDEXPR_TYPEDEF, __LINE__ )
227 //*************************************************************************************************
228 
229 } // namespace blaze
230 
231 #endif
Header file for the Rows type trait.
Header file for the And class template.
Header file for the SizeT class template.
Header file for the IsMatMatAddExpr type trait class.
Header file for the IsMatrix type trait.
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 compile time constraints.
Header file for the Equal class template.