Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
blaze
math
traits
MultExprTrait.h
Go to the documentation of this file.
1
//=================================================================================================
20
//=================================================================================================
21
22
#ifndef _BLAZE_MATH_TRAITS_MULTEXPRTRAIT_H_
23
#define _BLAZE_MATH_TRAITS_MULTEXPRTRAIT_H_
24
25
26
//*************************************************************************************************
27
// Includes
28
//*************************************************************************************************
29
30
#include <
blaze/math/traits/DMatDMatMultExprTrait.h
>
31
#include <
blaze/math/traits/DMatDVecMultExprTrait.h
>
32
#include <
blaze/math/traits/DMatScalarMultExprTrait.h
>
33
#include <
blaze/math/traits/DMatSMatMultExprTrait.h
>
34
#include <
blaze/math/traits/DMatSVecMultExprTrait.h
>
35
#include <
blaze/math/traits/DMatTDMatMultExprTrait.h
>
36
#include <
blaze/math/traits/DMatTSMatMultExprTrait.h
>
37
#include <
blaze/math/traits/DVecDVecMultExprTrait.h
>
38
#include <
blaze/math/traits/DVecScalarMultExprTrait.h
>
39
#include <
blaze/math/traits/DVecSVecMultExprTrait.h
>
40
#include <
blaze/math/traits/DVecTDVecMultExprTrait.h
>
41
#include <
blaze/math/traits/DVecTSVecMultExprTrait.h
>
42
#include <
blaze/math/traits/MultTrait.h
>
43
#include <
blaze/math/traits/SMatDMatMultExprTrait.h
>
44
#include <
blaze/math/traits/SMatDVecMultExprTrait.h
>
45
#include <
blaze/math/traits/SMatScalarMultExprTrait.h
>
46
#include <
blaze/math/traits/SMatSMatMultExprTrait.h
>
47
#include <
blaze/math/traits/SMatSVecMultExprTrait.h
>
48
#include <
blaze/math/traits/SMatTDMatMultExprTrait.h
>
49
#include <
blaze/math/traits/SMatTSMatMultExprTrait.h
>
50
#include <
blaze/math/traits/SVecDVecMultExprTrait.h
>
51
#include <
blaze/math/traits/SVecScalarMultExprTrait.h
>
52
#include <
blaze/math/traits/SVecSVecMultExprTrait.h
>
53
#include <
blaze/math/traits/SVecTDVecMultExprTrait.h
>
54
#include <
blaze/math/traits/SVecTSVecMultExprTrait.h
>
55
#include <
blaze/math/traits/TDMatDMatMultExprTrait.h
>
56
#include <
blaze/math/traits/TDMatDVecMultExprTrait.h
>
57
#include <
blaze/math/traits/TDMatScalarMultExprTrait.h
>
58
#include <
blaze/math/traits/TDMatSMatMultExprTrait.h
>
59
#include <
blaze/math/traits/TDMatSVecMultExprTrait.h
>
60
#include <
blaze/math/traits/TDMatTDMatMultExprTrait.h
>
61
#include <
blaze/math/traits/TDMatTSMatMultExprTrait.h
>
62
#include <
blaze/math/traits/TDVecDMatMultExprTrait.h
>
63
#include <
blaze/math/traits/TDVecDVecMultExprTrait.h
>
64
#include <
blaze/math/traits/TDVecScalarMultExprTrait.h
>
65
#include <
blaze/math/traits/TDVecSMatMultExprTrait.h
>
66
#include <
blaze/math/traits/TDVecSVecMultExprTrait.h
>
67
#include <
blaze/math/traits/TDVecTDMatMultExprTrait.h
>
68
#include <
blaze/math/traits/TDVecTDVecMultExprTrait.h
>
69
#include <
blaze/math/traits/TDVecTSMatMultExprTrait.h
>
70
#include <
blaze/math/traits/TDVecTSVecMultExprTrait.h
>
71
#include <
blaze/math/traits/TSMatDMatMultExprTrait.h
>
72
#include <
blaze/math/traits/TSMatDVecMultExprTrait.h
>
73
#include <
blaze/math/traits/TSMatScalarMultExprTrait.h
>
74
#include <
blaze/math/traits/TSMatSMatMultExprTrait.h
>
75
#include <
blaze/math/traits/TSMatSVecMultExprTrait.h
>
76
#include <
blaze/math/traits/TSMatTDMatMultExprTrait.h
>
77
#include <
blaze/math/traits/TSMatTSMatMultExprTrait.h
>
78
#include <
blaze/math/traits/TSVecDMatMultExprTrait.h
>
79
#include <
blaze/math/traits/TSVecDVecMultExprTrait.h
>
80
#include <
blaze/math/traits/TSVecScalarMultExprTrait.h
>
81
#include <
blaze/math/traits/TSVecSMatMultExprTrait.h
>
82
#include <
blaze/math/traits/TSVecSVecMultExprTrait.h
>
83
#include <
blaze/math/traits/TSVecTDMatMultExprTrait.h
>
84
#include <
blaze/math/traits/TSVecTDVecMultExprTrait.h
>
85
#include <
blaze/math/traits/TSVecTSMatMultExprTrait.h
>
86
#include <
blaze/math/traits/TSVecTSVecMultExprTrait.h
>
87
#include <
blaze/math/typetraits/IsDenseMatrix.h
>
88
#include <
blaze/math/typetraits/IsMatrix.h
>
89
#include <
blaze/math/typetraits/IsRowMajorMatrix.h
>
90
#include <
blaze/math/typetraits/IsTransposeVector.h
>
91
#include <
blaze/math/typetraits/IsVector.h
>
92
#include <
blaze/util/InvalidType.h
>
93
#include <
blaze/util/mpl/If.h
>
94
#include <
blaze/util/mpl/IfNot.h
>
95
#include <
blaze/util/SelectType.h
>
96
#include <
blaze/util/typetraits/IsConst.h
>
97
#include <
blaze/util/typetraits/IsNumeric.h
>
98
#include <
blaze/util/typetraits/IsReference.h
>
99
#include <
blaze/util/typetraits/IsVolatile.h
>
100
#include <
blaze/util/typetraits/RemoveCV.h
>
101
#include <
blaze/util/typetraits/RemoveReference.h
>
102
103
104
namespace
blaze {
105
106
//=================================================================================================
107
//
108
// CLASS DEFINITION
109
//
110
//=================================================================================================
111
112
//*************************************************************************************************
122
template
<
typename
T1
// Type of the left-hand side multiplication operand
123
,
typename
T2 >
// Type of the right-hand side multiplication operand
124
struct
MultExprTrait
125
{
126
private
:
127
//**struct Failure******************************************************************************
129
struct
Failure {
typedef
INVALID_TYPE Type; };
131
//**********************************************************************************************
132
133
//**********************************************************************************************
135
enum
{ qualified =
IsConst<T1>::value
||
IsVolatile<T1>::value
||
IsReference<T1>::value
||
136
IsConst<T2>::value
||
IsVolatile<T2>::value
||
IsReference<T2>::value
};
138
//**********************************************************************************************
139
140
//**********************************************************************************************
142
typedef
typename
If< IsMatrix<T1>
143
,
typename
If< IsDenseMatrix<T1>
144
,
typename
If< IsRowMajorMatrix<T1>
145
,
typename
If< IsMatrix<T2>
146
,
typename
If< IsDenseMatrix<T2>
147
,
typename
If< IsRowMajorMatrix<T2>
148
,
DMatDMatMultExprTrait<T1,T2>
149
,
DMatTDMatMultExprTrait<T1,T2>
150
>::Type
151
,
typename
If< IsRowMajorMatrix<T2>
152
,
DMatSMatMultExprTrait<T1,T2>
153
,
DMatTSMatMultExprTrait<T1,T2>
154
>::Type
155
>::Type
156
,
typename
If< IsVector<T2>
157
,
typename
If< IsDenseVector<T2>
158
,
typename
IfNot< IsTransposeVector<T2>
159
,
DMatDVecMultExprTrait<T1,T2>
160
, Failure
161
>::Type
162
,
typename
IfNot< IsTransposeVector<T2>
163
,
DMatSVecMultExprTrait<T1,T2>
164
, Failure
165
>::Type
166
>::Type
167
,
typename
If< IsNumeric<T2>
168
,
DMatScalarMultExprTrait<T1,T2>
169
, Failure
170
>::Type
171
>::Type
172
>::Type
173
,
typename
If< IsMatrix<T2>
174
,
typename
If< IsDenseMatrix<T2>
175
,
typename
If< IsRowMajorMatrix<T2>
176
,
TDMatDMatMultExprTrait<T1,T2>
177
,
TDMatTDMatMultExprTrait<T1,T2>
178
>::Type
179
,
typename
If< IsRowMajorMatrix<T2>
180
,
TDMatSMatMultExprTrait<T1,T2>
181
,
TDMatTSMatMultExprTrait<T1,T2>
182
>::Type
183
>::Type
184
,
typename
If< IsVector<T2>
185
,
typename
If< IsDenseVector<T2>
186
,
typename
IfNot< IsTransposeVector<T2>
187
,
TDMatDVecMultExprTrait<T1,T2>
188
, Failure
189
>::Type
190
,
typename
IfNot< IsTransposeVector<T2>
191
,
TDMatSVecMultExprTrait<T1,T2>
192
, Failure
193
>::Type
194
>::Type
195
,
typename
If< IsNumeric<T2>
196
,
TDMatScalarMultExprTrait<T1,T2>
197
, Failure
198
>::Type
199
>::Type
200
>::Type
201
>::Type
202
,
typename
If< IsRowMajorMatrix<T1>
203
,
typename
If< IsMatrix<T2>
204
,
typename
If< IsDenseMatrix<T2>
205
,
typename
If< IsRowMajorMatrix<T2>
206
,
SMatDMatMultExprTrait<T1,T2>
207
,
SMatTDMatMultExprTrait<T1,T2>
208
>::Type
209
,
typename
If< IsRowMajorMatrix<T2>
210
,
SMatSMatMultExprTrait<T1,T2>
211
,
SMatTSMatMultExprTrait<T1,T2>
212
>::Type
213
>::Type
214
,
typename
If< IsVector<T2>
215
,
typename
If< IsDenseVector<T2>
216
,
typename
IfNot< IsTransposeVector<T2>
217
,
SMatDVecMultExprTrait<T1,T2>
218
, Failure
219
>::Type
220
,
typename
IfNot< IsTransposeVector<T2>
221
,
SMatSVecMultExprTrait<T1,T2>
222
, Failure
223
>::Type
224
>::Type
225
,
typename
If< IsNumeric<T2>
226
,
SMatScalarMultExprTrait<T1,T2>
227
, Failure
228
>::Type
229
>::Type
230
>::Type
231
,
typename
If< IsMatrix<T2>
232
,
typename
If< IsDenseMatrix<T2>
233
,
typename
If< IsRowMajorMatrix<T2>
234
,
TSMatDMatMultExprTrait<T1,T2>
235
,
TSMatTDMatMultExprTrait<T1,T2>
236
>::Type
237
,
typename
If< IsRowMajorMatrix<T2>
238
,
TSMatSMatMultExprTrait<T1,T2>
239
,
TSMatTSMatMultExprTrait<T1,T2>
240
>::Type
241
>::Type
242
,
typename
If< IsVector<T2>
243
,
typename
If< IsDenseVector<T2>
244
,
typename
IfNot< IsTransposeVector<T2>
245
,
TSMatDVecMultExprTrait<T1,T2>
246
, Failure
247
>::Type
248
,
typename
IfNot< IsTransposeVector<T2>
249
,
TSMatSVecMultExprTrait<T1,T2>
250
, Failure
251
>::Type
252
>::Type
253
,
typename
If< IsNumeric<T2>
254
,
TSMatScalarMultExprTrait<T1,T2>
255
, Failure
256
>::Type
257
>::Type
258
>::Type
259
>::Type
260
>::Type
261
,
typename
If< IsVector<T1>
262
,
typename
If< IsDenseVector<T1>
263
,
typename
If< IsTransposeVector<T1>
264
,
typename
If< IsMatrix<T2>
265
,
typename
If< IsDenseMatrix<T2>
266
,
typename
If< IsRowMajorMatrix<T2>
267
,
TDVecDMatMultExprTrait<T1,T2>
268
,
TDVecTDMatMultExprTrait<T1,T2>
269
>::Type
270
,
typename
If< IsRowMajorMatrix<T2>
271
,
TDVecSMatMultExprTrait<T1,T2>
272
,
TDVecTSMatMultExprTrait<T1,T2>
273
>::Type
274
>::Type
275
,
typename
If< IsVector<T2>
276
,
typename
If< IsDenseVector<T2>
277
,
typename
If< IsTransposeVector<T2>
278
,
TDVecTDVecMultExprTrait<T1,T2>
279
,
TDVecDVecMultExprTrait<T1,T2>
280
>::Type
281
,
typename
If< IsTransposeVector<T2>
282
,
TDVecTSVecMultExprTrait<T1,T2>
283
,
TDVecSVecMultExprTrait<T1,T2>
284
>::Type
285
>::Type
286
,
typename
If< IsNumeric<T2>
287
,
TDVecScalarMultExprTrait<T1,T2>
288
, Failure
289
>::Type
290
>::Type
291
>::Type
292
,
typename
If< IsVector<T2>
293
,
typename
If< IsDenseVector<T2>
294
,
typename
If< IsTransposeVector<T2>
295
,
DVecTDVecMultExprTrait<T1,T2>
296
,
DVecDVecMultExprTrait<T1,T2>
297
>::Type
298
,
typename
If< IsTransposeVector<T2>
299
,
DVecTSVecMultExprTrait<T1,T2>
300
,
DVecSVecMultExprTrait<T1,T2>
301
>::Type
302
>::Type
303
,
typename
If< IsNumeric<T2>
304
,
DVecScalarMultExprTrait<T1,T2>
305
, Failure
306
>::Type
307
>::Type
308
>::Type
309
,
typename
If< IsTransposeVector<T1>
310
,
typename
If< IsMatrix<T2>
311
,
typename
If< IsDenseMatrix<T2>
312
,
typename
If< IsRowMajorMatrix<T2>
313
,
TSVecDMatMultExprTrait<T1,T2>
314
,
TSVecTDMatMultExprTrait<T1,T2>
315
>::Type
316
,
typename
If< IsRowMajorMatrix<T2>
317
,
TSVecSMatMultExprTrait<T1,T2>
318
,
TSVecTSMatMultExprTrait<T1,T2>
319
>::Type
320
>::Type
321
,
typename
If< IsVector<T2>
322
,
typename
If< IsDenseVector<T2>
323
,
typename
If< IsTransposeVector<T2>
324
,
TSVecTDVecMultExprTrait<T1,T2>
325
,
TSVecDVecMultExprTrait<T1,T2>
326
>::Type
327
,
typename
If< IsTransposeVector<T2>
328
,
TSVecTSVecMultExprTrait<T1,T2>
329
,
TSVecSVecMultExprTrait<T1,T2>
330
>::Type
331
>::Type
332
,
typename
If< IsNumeric<T2>
333
,
TSVecScalarMultExprTrait<T1,T2>
334
, Failure
335
>::Type
336
>::Type
337
>::Type
338
,
typename
If< IsVector<T2>
339
,
typename
If< IsDenseVector<T2>
340
,
typename
If< IsTransposeVector<T2>
341
,
SVecTDVecMultExprTrait<T1,T2>
342
,
SVecDVecMultExprTrait<T1,T2>
343
>::Type
344
,
typename
If< IsTransposeVector<T2>
345
,
SVecTSVecMultExprTrait<T1,T2>
346
,
SVecSVecMultExprTrait<T1,T2>
347
>::Type
348
>::Type
349
,
typename
If< IsNumeric<T2>
350
,
SVecScalarMultExprTrait<T1,T2>
351
, Failure
352
>::Type
353
>::Type
354
>::Type
355
>::Type
356
,
typename
If< IsNumeric<T1>
357
,
typename
If< IsMatrix<T2>
358
,
typename
If< IsDenseMatrix<T2>
359
,
typename
If< IsRowMajorMatrix<T2>
360
,
DMatScalarMultExprTrait<T2,T1>
361
,
TDMatScalarMultExprTrait<T2,T1>
362
>::Type
363
,
typename
If< IsRowMajorMatrix<T2>
364
,
SMatScalarMultExprTrait<T2,T1>
365
,
TSMatScalarMultExprTrait<T2,T1>
366
>::Type
367
>::Type
368
,
typename
If< IsVector<T2>
369
,
typename
If< IsDenseVector<T2>
370
,
typename
If< IsTransposeVector<T2>
371
,
TDVecScalarMultExprTrait<T2,T1>
372
,
DVecScalarMultExprTrait<T2,T1>
373
>::Type
374
,
typename
If< IsTransposeVector<T2>
375
,
TSVecScalarMultExprTrait<T2,T1>
376
,
SVecScalarMultExprTrait<T2,T1>
377
>::Type
378
>::Type
379
,
typename
If< IsNumeric<T2>
380
,
MultTrait<T1,T2>
381
, Failure
382
>::Type
383
>::Type
384
>::Type
385
, Failure
386
>::Type
387
>::Type
388
>::Type Tmp;
389
390
typedef
typename
RemoveReference< typename RemoveCV<T1>::Type
>::Type Type1;
391
typedef
typename
RemoveReference< typename RemoveCV<T2>::Type
>::Type Type2;
393
//**********************************************************************************************
394
395
public
:
396
//**********************************************************************************************
398
typedef
typename
SelectType< qualified, MultExprTrait<Type1,Type2>
, Tmp >::Type::Type Type;
400
//**********************************************************************************************
401
};
402
//*************************************************************************************************
403
404
}
// namespace blaze
405
406
#endif
Generated on Fri May 24 2013 16:39:56 by
1.8.3.1