source: Sophya/trunk/SophyaExt/Blitz/blitz/matbops.h@ 2907

Last change on this file since 2907 was 221, checked in by ansari, 26 years ago

Creation module DPC/Blitz (blitz 0.4) Reza 09/04/99

File size: 218.0 KB
RevLine 
[221]1// Generated source file. Do not edit.
2// Created by: genmatbops.cpp Aug 8 1997 15:21:36
3
4#ifndef BZ_MATBOPS_H
5#define BZ_MATBOPS_H
6
7BZ_NAMESPACE(blitz)
8
9#ifndef BZ_MATEXPR_H
10 #error <blitz/matbops.h> must be included via <blitz/matexpr.h>
11#endif
12
13/****************************************************************************
14 * Addition Operators
15 ****************************************************************************/
16
17// Matrix<P_numtype1, P_struct1> + Matrix<P_numtype2, P_struct2>
18template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
19inline
20_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
21 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Add<P_numtype1, P_numtype2> > >
22operator+(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
23{
24 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
25 _bz_MatrixRef<P_numtype2, P_struct2>,
26 _bz_Add<P_numtype1, P_numtype2> > T_expr;
27
28 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
29 d2._bz_getRef()));
30}
31
32// Matrix<P_numtype1, P_struct1> + _bz_MatExpr<P_expr2>
33template<class P_numtype1, class P_struct1, class P_expr2>
34inline
35_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
36 _bz_MatExpr<P_expr2>, _bz_Add<P_numtype1, _bz_typename P_expr2::T_numtype> > >
37operator+(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
38{
39 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
40 _bz_MatExpr<P_expr2>,
41 _bz_Add<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
42
43 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
44 d2));
45}
46
47// Matrix<P_numtype1, P_struct1> + int
48template<class P_numtype1, class P_struct1>
49inline
50_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
51 _bz_MatExprConstant<int>, _bz_Add<P_numtype1, int> > >
52operator+(const Matrix<P_numtype1, P_struct1>& d1, int d2)
53{
54 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
55 _bz_MatExprConstant<int>,
56 _bz_Add<P_numtype1, int> > T_expr;
57
58 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
59 _bz_MatExprConstant<int>(d2)));
60}
61
62// Matrix<P_numtype1, P_struct1> + float
63template<class P_numtype1, class P_struct1>
64inline
65_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
66 _bz_MatExprConstant<float>, _bz_Add<P_numtype1, float> > >
67operator+(const Matrix<P_numtype1, P_struct1>& d1, float d2)
68{
69 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
70 _bz_MatExprConstant<float>,
71 _bz_Add<P_numtype1, float> > T_expr;
72
73 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
74 _bz_MatExprConstant<float>(d2)));
75}
76
77// Matrix<P_numtype1, P_struct1> + double
78template<class P_numtype1, class P_struct1>
79inline
80_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
81 _bz_MatExprConstant<double>, _bz_Add<P_numtype1, double> > >
82operator+(const Matrix<P_numtype1, P_struct1>& d1, double d2)
83{
84 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
85 _bz_MatExprConstant<double>,
86 _bz_Add<P_numtype1, double> > T_expr;
87
88 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
89 _bz_MatExprConstant<double>(d2)));
90}
91
92// Matrix<P_numtype1, P_struct1> + long double
93template<class P_numtype1, class P_struct1>
94inline
95_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
96 _bz_MatExprConstant<long double>, _bz_Add<P_numtype1, long double> > >
97operator+(const Matrix<P_numtype1, P_struct1>& d1, long double d2)
98{
99 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
100 _bz_MatExprConstant<long double>,
101 _bz_Add<P_numtype1, long double> > T_expr;
102
103 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
104 _bz_MatExprConstant<long double>(d2)));
105}
106
107#ifdef BZ_HAVE_COMPLEX
108// Matrix<P_numtype1, P_struct1> + complex<float>
109template<class P_numtype1, class P_struct1>
110inline
111_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
112 _bz_MatExprConstant<complex<float> >, _bz_Add<P_numtype1, complex<float> > > >
113operator+(const Matrix<P_numtype1, P_struct1>& d1, complex<float> d2)
114{
115 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
116 _bz_MatExprConstant<complex<float> >,
117 _bz_Add<P_numtype1, complex<float> > > T_expr;
118
119 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
120 _bz_MatExprConstant<complex<float> >(d2)));
121}
122#endif // BZ_HAVE_COMPLEX
123
124#ifdef BZ_HAVE_COMPLEX
125// Matrix<P_numtype1, P_struct1> + complex<double>
126template<class P_numtype1, class P_struct1>
127inline
128_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
129 _bz_MatExprConstant<complex<double> >, _bz_Add<P_numtype1, complex<double> > > >
130operator+(const Matrix<P_numtype1, P_struct1>& d1, complex<double> d2)
131{
132 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
133 _bz_MatExprConstant<complex<double> >,
134 _bz_Add<P_numtype1, complex<double> > > T_expr;
135
136 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
137 _bz_MatExprConstant<complex<double> >(d2)));
138}
139#endif // BZ_HAVE_COMPLEX
140
141#ifdef BZ_HAVE_COMPLEX
142// Matrix<P_numtype1, P_struct1> + complex<long double>
143template<class P_numtype1, class P_struct1>
144inline
145_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
146 _bz_MatExprConstant<complex<long double> >, _bz_Add<P_numtype1, complex<long double> > > >
147operator+(const Matrix<P_numtype1, P_struct1>& d1, complex<long double> d2)
148{
149 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
150 _bz_MatExprConstant<complex<long double> >,
151 _bz_Add<P_numtype1, complex<long double> > > T_expr;
152
153 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
154 _bz_MatExprConstant<complex<long double> >(d2)));
155}
156#endif // BZ_HAVE_COMPLEX
157
158// _bz_MatExpr<P_expr1> + Matrix<P_numtype2, P_struct2>
159template<class P_expr1, class P_numtype2, class P_struct2>
160inline
161_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
162 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Add<_bz_typename P_expr1::T_numtype, P_numtype2> > >
163operator+(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
164{
165 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
166 _bz_MatrixRef<P_numtype2, P_struct2>,
167 _bz_Add<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
168
169 return _bz_MatExpr<T_expr>(T_expr(d1,
170 d2._bz_getRef()));
171}
172
173// _bz_MatExpr<P_expr1> + _bz_MatExpr<P_expr2>
174template<class P_expr1, class P_expr2>
175inline
176_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
177 _bz_MatExpr<P_expr2>, _bz_Add<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
178operator+(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
179{
180 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
181 _bz_MatExpr<P_expr2>,
182 _bz_Add<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
183
184 return _bz_MatExpr<T_expr>(T_expr(d1,
185 d2));
186}
187
188// _bz_MatExpr<P_expr1> + int
189template<class P_expr1>
190inline
191_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
192 _bz_MatExprConstant<int>, _bz_Add<_bz_typename P_expr1::T_numtype, int> > >
193operator+(_bz_MatExpr<P_expr1> d1, int d2)
194{
195 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
196 _bz_MatExprConstant<int>,
197 _bz_Add<_bz_typename P_expr1::T_numtype, int> > T_expr;
198
199 return _bz_MatExpr<T_expr>(T_expr(d1,
200 _bz_MatExprConstant<int>(d2)));
201}
202
203// _bz_MatExpr<P_expr1> + float
204template<class P_expr1>
205inline
206_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
207 _bz_MatExprConstant<float>, _bz_Add<_bz_typename P_expr1::T_numtype, float> > >
208operator+(_bz_MatExpr<P_expr1> d1, float d2)
209{
210 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
211 _bz_MatExprConstant<float>,
212 _bz_Add<_bz_typename P_expr1::T_numtype, float> > T_expr;
213
214 return _bz_MatExpr<T_expr>(T_expr(d1,
215 _bz_MatExprConstant<float>(d2)));
216}
217
218// _bz_MatExpr<P_expr1> + double
219template<class P_expr1>
220inline
221_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
222 _bz_MatExprConstant<double>, _bz_Add<_bz_typename P_expr1::T_numtype, double> > >
223operator+(_bz_MatExpr<P_expr1> d1, double d2)
224{
225 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
226 _bz_MatExprConstant<double>,
227 _bz_Add<_bz_typename P_expr1::T_numtype, double> > T_expr;
228
229 return _bz_MatExpr<T_expr>(T_expr(d1,
230 _bz_MatExprConstant<double>(d2)));
231}
232
233// _bz_MatExpr<P_expr1> + long double
234template<class P_expr1>
235inline
236_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
237 _bz_MatExprConstant<long double>, _bz_Add<_bz_typename P_expr1::T_numtype, long double> > >
238operator+(_bz_MatExpr<P_expr1> d1, long double d2)
239{
240 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
241 _bz_MatExprConstant<long double>,
242 _bz_Add<_bz_typename P_expr1::T_numtype, long double> > T_expr;
243
244 return _bz_MatExpr<T_expr>(T_expr(d1,
245 _bz_MatExprConstant<long double>(d2)));
246}
247
248#ifdef BZ_HAVE_COMPLEX
249// _bz_MatExpr<P_expr1> + complex<float>
250template<class P_expr1>
251inline
252_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
253 _bz_MatExprConstant<complex<float> >, _bz_Add<_bz_typename P_expr1::T_numtype, complex<float> > > >
254operator+(_bz_MatExpr<P_expr1> d1, complex<float> d2)
255{
256 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
257 _bz_MatExprConstant<complex<float> >,
258 _bz_Add<_bz_typename P_expr1::T_numtype, complex<float> > > T_expr;
259
260 return _bz_MatExpr<T_expr>(T_expr(d1,
261 _bz_MatExprConstant<complex<float> >(d2)));
262}
263#endif // BZ_HAVE_COMPLEX
264
265#ifdef BZ_HAVE_COMPLEX
266// _bz_MatExpr<P_expr1> + complex<double>
267template<class P_expr1>
268inline
269_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
270 _bz_MatExprConstant<complex<double> >, _bz_Add<_bz_typename P_expr1::T_numtype, complex<double> > > >
271operator+(_bz_MatExpr<P_expr1> d1, complex<double> d2)
272{
273 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
274 _bz_MatExprConstant<complex<double> >,
275 _bz_Add<_bz_typename P_expr1::T_numtype, complex<double> > > T_expr;
276
277 return _bz_MatExpr<T_expr>(T_expr(d1,
278 _bz_MatExprConstant<complex<double> >(d2)));
279}
280#endif // BZ_HAVE_COMPLEX
281
282#ifdef BZ_HAVE_COMPLEX
283// _bz_MatExpr<P_expr1> + complex<long double>
284template<class P_expr1>
285inline
286_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
287 _bz_MatExprConstant<complex<long double> >, _bz_Add<_bz_typename P_expr1::T_numtype, complex<long double> > > >
288operator+(_bz_MatExpr<P_expr1> d1, complex<long double> d2)
289{
290 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
291 _bz_MatExprConstant<complex<long double> >,
292 _bz_Add<_bz_typename P_expr1::T_numtype, complex<long double> > > T_expr;
293
294 return _bz_MatExpr<T_expr>(T_expr(d1,
295 _bz_MatExprConstant<complex<long double> >(d2)));
296}
297#endif // BZ_HAVE_COMPLEX
298
299// int + Matrix<P_numtype2, P_struct2>
300template<class P_numtype2, class P_struct2>
301inline
302_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
303 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Add<int, P_numtype2> > >
304operator+(int d1, const Matrix<P_numtype2, P_struct2>& d2)
305{
306 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
307 _bz_MatrixRef<P_numtype2, P_struct2>,
308 _bz_Add<int, P_numtype2> > T_expr;
309
310 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
311 d2._bz_getRef()));
312}
313
314// int + _bz_MatExpr<P_expr2>
315template<class P_expr2>
316inline
317_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
318 _bz_MatExpr<P_expr2>, _bz_Add<int, _bz_typename P_expr2::T_numtype> > >
319operator+(int d1, _bz_MatExpr<P_expr2> d2)
320{
321 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
322 _bz_MatExpr<P_expr2>,
323 _bz_Add<int, _bz_typename P_expr2::T_numtype> > T_expr;
324
325 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
326 d2));
327}
328
329// float + Matrix<P_numtype2, P_struct2>
330template<class P_numtype2, class P_struct2>
331inline
332_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
333 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Add<float, P_numtype2> > >
334operator+(float d1, const Matrix<P_numtype2, P_struct2>& d2)
335{
336 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
337 _bz_MatrixRef<P_numtype2, P_struct2>,
338 _bz_Add<float, P_numtype2> > T_expr;
339
340 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
341 d2._bz_getRef()));
342}
343
344// float + _bz_MatExpr<P_expr2>
345template<class P_expr2>
346inline
347_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
348 _bz_MatExpr<P_expr2>, _bz_Add<float, _bz_typename P_expr2::T_numtype> > >
349operator+(float d1, _bz_MatExpr<P_expr2> d2)
350{
351 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
352 _bz_MatExpr<P_expr2>,
353 _bz_Add<float, _bz_typename P_expr2::T_numtype> > T_expr;
354
355 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
356 d2));
357}
358
359// double + Matrix<P_numtype2, P_struct2>
360template<class P_numtype2, class P_struct2>
361inline
362_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
363 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Add<double, P_numtype2> > >
364operator+(double d1, const Matrix<P_numtype2, P_struct2>& d2)
365{
366 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
367 _bz_MatrixRef<P_numtype2, P_struct2>,
368 _bz_Add<double, P_numtype2> > T_expr;
369
370 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
371 d2._bz_getRef()));
372}
373
374// double + _bz_MatExpr<P_expr2>
375template<class P_expr2>
376inline
377_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
378 _bz_MatExpr<P_expr2>, _bz_Add<double, _bz_typename P_expr2::T_numtype> > >
379operator+(double d1, _bz_MatExpr<P_expr2> d2)
380{
381 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
382 _bz_MatExpr<P_expr2>,
383 _bz_Add<double, _bz_typename P_expr2::T_numtype> > T_expr;
384
385 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
386 d2));
387}
388
389// long double + Matrix<P_numtype2, P_struct2>
390template<class P_numtype2, class P_struct2>
391inline
392_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
393 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Add<long double, P_numtype2> > >
394operator+(long double d1, const Matrix<P_numtype2, P_struct2>& d2)
395{
396 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
397 _bz_MatrixRef<P_numtype2, P_struct2>,
398 _bz_Add<long double, P_numtype2> > T_expr;
399
400 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
401 d2._bz_getRef()));
402}
403
404// long double + _bz_MatExpr<P_expr2>
405template<class P_expr2>
406inline
407_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
408 _bz_MatExpr<P_expr2>, _bz_Add<long double, _bz_typename P_expr2::T_numtype> > >
409operator+(long double d1, _bz_MatExpr<P_expr2> d2)
410{
411 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
412 _bz_MatExpr<P_expr2>,
413 _bz_Add<long double, _bz_typename P_expr2::T_numtype> > T_expr;
414
415 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
416 d2));
417}
418
419#ifdef BZ_HAVE_COMPLEX
420// complex<float> + Matrix<P_numtype2, P_struct2>
421template<class P_numtype2, class P_struct2>
422inline
423_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
424 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Add<complex<float> , P_numtype2> > >
425operator+(complex<float> d1, const Matrix<P_numtype2, P_struct2>& d2)
426{
427 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
428 _bz_MatrixRef<P_numtype2, P_struct2>,
429 _bz_Add<complex<float> , P_numtype2> > T_expr;
430
431 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
432 d2._bz_getRef()));
433}
434#endif // BZ_HAVE_COMPLEX
435
436#ifdef BZ_HAVE_COMPLEX
437// complex<float> + _bz_MatExpr<P_expr2>
438template<class P_expr2>
439inline
440_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
441 _bz_MatExpr<P_expr2>, _bz_Add<complex<float> , _bz_typename P_expr2::T_numtype> > >
442operator+(complex<float> d1, _bz_MatExpr<P_expr2> d2)
443{
444 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
445 _bz_MatExpr<P_expr2>,
446 _bz_Add<complex<float> , _bz_typename P_expr2::T_numtype> > T_expr;
447
448 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
449 d2));
450}
451#endif // BZ_HAVE_COMPLEX
452
453#ifdef BZ_HAVE_COMPLEX
454// complex<double> + Matrix<P_numtype2, P_struct2>
455template<class P_numtype2, class P_struct2>
456inline
457_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
458 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Add<complex<double> , P_numtype2> > >
459operator+(complex<double> d1, const Matrix<P_numtype2, P_struct2>& d2)
460{
461 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
462 _bz_MatrixRef<P_numtype2, P_struct2>,
463 _bz_Add<complex<double> , P_numtype2> > T_expr;
464
465 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
466 d2._bz_getRef()));
467}
468#endif // BZ_HAVE_COMPLEX
469
470#ifdef BZ_HAVE_COMPLEX
471// complex<double> + _bz_MatExpr<P_expr2>
472template<class P_expr2>
473inline
474_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
475 _bz_MatExpr<P_expr2>, _bz_Add<complex<double> , _bz_typename P_expr2::T_numtype> > >
476operator+(complex<double> d1, _bz_MatExpr<P_expr2> d2)
477{
478 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
479 _bz_MatExpr<P_expr2>,
480 _bz_Add<complex<double> , _bz_typename P_expr2::T_numtype> > T_expr;
481
482 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
483 d2));
484}
485#endif // BZ_HAVE_COMPLEX
486
487#ifdef BZ_HAVE_COMPLEX
488// complex<long double> + Matrix<P_numtype2, P_struct2>
489template<class P_numtype2, class P_struct2>
490inline
491_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
492 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Add<complex<long double> , P_numtype2> > >
493operator+(complex<long double> d1, const Matrix<P_numtype2, P_struct2>& d2)
494{
495 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
496 _bz_MatrixRef<P_numtype2, P_struct2>,
497 _bz_Add<complex<long double> , P_numtype2> > T_expr;
498
499 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
500 d2._bz_getRef()));
501}
502#endif // BZ_HAVE_COMPLEX
503
504#ifdef BZ_HAVE_COMPLEX
505// complex<long double> + _bz_MatExpr<P_expr2>
506template<class P_expr2>
507inline
508_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
509 _bz_MatExpr<P_expr2>, _bz_Add<complex<long double> , _bz_typename P_expr2::T_numtype> > >
510operator+(complex<long double> d1, _bz_MatExpr<P_expr2> d2)
511{
512 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
513 _bz_MatExpr<P_expr2>,
514 _bz_Add<complex<long double> , _bz_typename P_expr2::T_numtype> > T_expr;
515
516 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
517 d2));
518}
519#endif // BZ_HAVE_COMPLEX
520/****************************************************************************
521 * Subtraction Operators
522 ****************************************************************************/
523
524// Matrix<P_numtype1, P_struct1> - Matrix<P_numtype2, P_struct2>
525template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
526inline
527_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
528 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Subtract<P_numtype1, P_numtype2> > >
529operator-(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
530{
531 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
532 _bz_MatrixRef<P_numtype2, P_struct2>,
533 _bz_Subtract<P_numtype1, P_numtype2> > T_expr;
534
535 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
536 d2._bz_getRef()));
537}
538
539// Matrix<P_numtype1, P_struct1> - _bz_MatExpr<P_expr2>
540template<class P_numtype1, class P_struct1, class P_expr2>
541inline
542_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
543 _bz_MatExpr<P_expr2>, _bz_Subtract<P_numtype1, _bz_typename P_expr2::T_numtype> > >
544operator-(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
545{
546 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
547 _bz_MatExpr<P_expr2>,
548 _bz_Subtract<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
549
550 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
551 d2));
552}
553
554// Matrix<P_numtype1, P_struct1> - int
555template<class P_numtype1, class P_struct1>
556inline
557_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
558 _bz_MatExprConstant<int>, _bz_Subtract<P_numtype1, int> > >
559operator-(const Matrix<P_numtype1, P_struct1>& d1, int d2)
560{
561 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
562 _bz_MatExprConstant<int>,
563 _bz_Subtract<P_numtype1, int> > T_expr;
564
565 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
566 _bz_MatExprConstant<int>(d2)));
567}
568
569// Matrix<P_numtype1, P_struct1> - float
570template<class P_numtype1, class P_struct1>
571inline
572_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
573 _bz_MatExprConstant<float>, _bz_Subtract<P_numtype1, float> > >
574operator-(const Matrix<P_numtype1, P_struct1>& d1, float d2)
575{
576 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
577 _bz_MatExprConstant<float>,
578 _bz_Subtract<P_numtype1, float> > T_expr;
579
580 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
581 _bz_MatExprConstant<float>(d2)));
582}
583
584// Matrix<P_numtype1, P_struct1> - double
585template<class P_numtype1, class P_struct1>
586inline
587_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
588 _bz_MatExprConstant<double>, _bz_Subtract<P_numtype1, double> > >
589operator-(const Matrix<P_numtype1, P_struct1>& d1, double d2)
590{
591 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
592 _bz_MatExprConstant<double>,
593 _bz_Subtract<P_numtype1, double> > T_expr;
594
595 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
596 _bz_MatExprConstant<double>(d2)));
597}
598
599// Matrix<P_numtype1, P_struct1> - long double
600template<class P_numtype1, class P_struct1>
601inline
602_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
603 _bz_MatExprConstant<long double>, _bz_Subtract<P_numtype1, long double> > >
604operator-(const Matrix<P_numtype1, P_struct1>& d1, long double d2)
605{
606 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
607 _bz_MatExprConstant<long double>,
608 _bz_Subtract<P_numtype1, long double> > T_expr;
609
610 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
611 _bz_MatExprConstant<long double>(d2)));
612}
613
614#ifdef BZ_HAVE_COMPLEX
615// Matrix<P_numtype1, P_struct1> - complex<float>
616template<class P_numtype1, class P_struct1>
617inline
618_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
619 _bz_MatExprConstant<complex<float> >, _bz_Subtract<P_numtype1, complex<float> > > >
620operator-(const Matrix<P_numtype1, P_struct1>& d1, complex<float> d2)
621{
622 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
623 _bz_MatExprConstant<complex<float> >,
624 _bz_Subtract<P_numtype1, complex<float> > > T_expr;
625
626 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
627 _bz_MatExprConstant<complex<float> >(d2)));
628}
629#endif // BZ_HAVE_COMPLEX
630
631#ifdef BZ_HAVE_COMPLEX
632// Matrix<P_numtype1, P_struct1> - complex<double>
633template<class P_numtype1, class P_struct1>
634inline
635_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
636 _bz_MatExprConstant<complex<double> >, _bz_Subtract<P_numtype1, complex<double> > > >
637operator-(const Matrix<P_numtype1, P_struct1>& d1, complex<double> d2)
638{
639 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
640 _bz_MatExprConstant<complex<double> >,
641 _bz_Subtract<P_numtype1, complex<double> > > T_expr;
642
643 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
644 _bz_MatExprConstant<complex<double> >(d2)));
645}
646#endif // BZ_HAVE_COMPLEX
647
648#ifdef BZ_HAVE_COMPLEX
649// Matrix<P_numtype1, P_struct1> - complex<long double>
650template<class P_numtype1, class P_struct1>
651inline
652_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
653 _bz_MatExprConstant<complex<long double> >, _bz_Subtract<P_numtype1, complex<long double> > > >
654operator-(const Matrix<P_numtype1, P_struct1>& d1, complex<long double> d2)
655{
656 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
657 _bz_MatExprConstant<complex<long double> >,
658 _bz_Subtract<P_numtype1, complex<long double> > > T_expr;
659
660 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
661 _bz_MatExprConstant<complex<long double> >(d2)));
662}
663#endif // BZ_HAVE_COMPLEX
664
665// _bz_MatExpr<P_expr1> - Matrix<P_numtype2, P_struct2>
666template<class P_expr1, class P_numtype2, class P_struct2>
667inline
668_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
669 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Subtract<_bz_typename P_expr1::T_numtype, P_numtype2> > >
670operator-(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
671{
672 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
673 _bz_MatrixRef<P_numtype2, P_struct2>,
674 _bz_Subtract<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
675
676 return _bz_MatExpr<T_expr>(T_expr(d1,
677 d2._bz_getRef()));
678}
679
680// _bz_MatExpr<P_expr1> - _bz_MatExpr<P_expr2>
681template<class P_expr1, class P_expr2>
682inline
683_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
684 _bz_MatExpr<P_expr2>, _bz_Subtract<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
685operator-(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
686{
687 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
688 _bz_MatExpr<P_expr2>,
689 _bz_Subtract<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
690
691 return _bz_MatExpr<T_expr>(T_expr(d1,
692 d2));
693}
694
695// _bz_MatExpr<P_expr1> - int
696template<class P_expr1>
697inline
698_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
699 _bz_MatExprConstant<int>, _bz_Subtract<_bz_typename P_expr1::T_numtype, int> > >
700operator-(_bz_MatExpr<P_expr1> d1, int d2)
701{
702 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
703 _bz_MatExprConstant<int>,
704 _bz_Subtract<_bz_typename P_expr1::T_numtype, int> > T_expr;
705
706 return _bz_MatExpr<T_expr>(T_expr(d1,
707 _bz_MatExprConstant<int>(d2)));
708}
709
710// _bz_MatExpr<P_expr1> - float
711template<class P_expr1>
712inline
713_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
714 _bz_MatExprConstant<float>, _bz_Subtract<_bz_typename P_expr1::T_numtype, float> > >
715operator-(_bz_MatExpr<P_expr1> d1, float d2)
716{
717 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
718 _bz_MatExprConstant<float>,
719 _bz_Subtract<_bz_typename P_expr1::T_numtype, float> > T_expr;
720
721 return _bz_MatExpr<T_expr>(T_expr(d1,
722 _bz_MatExprConstant<float>(d2)));
723}
724
725// _bz_MatExpr<P_expr1> - double
726template<class P_expr1>
727inline
728_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
729 _bz_MatExprConstant<double>, _bz_Subtract<_bz_typename P_expr1::T_numtype, double> > >
730operator-(_bz_MatExpr<P_expr1> d1, double d2)
731{
732 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
733 _bz_MatExprConstant<double>,
734 _bz_Subtract<_bz_typename P_expr1::T_numtype, double> > T_expr;
735
736 return _bz_MatExpr<T_expr>(T_expr(d1,
737 _bz_MatExprConstant<double>(d2)));
738}
739
740// _bz_MatExpr<P_expr1> - long double
741template<class P_expr1>
742inline
743_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
744 _bz_MatExprConstant<long double>, _bz_Subtract<_bz_typename P_expr1::T_numtype, long double> > >
745operator-(_bz_MatExpr<P_expr1> d1, long double d2)
746{
747 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
748 _bz_MatExprConstant<long double>,
749 _bz_Subtract<_bz_typename P_expr1::T_numtype, long double> > T_expr;
750
751 return _bz_MatExpr<T_expr>(T_expr(d1,
752 _bz_MatExprConstant<long double>(d2)));
753}
754
755#ifdef BZ_HAVE_COMPLEX
756// _bz_MatExpr<P_expr1> - complex<float>
757template<class P_expr1>
758inline
759_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
760 _bz_MatExprConstant<complex<float> >, _bz_Subtract<_bz_typename P_expr1::T_numtype, complex<float> > > >
761operator-(_bz_MatExpr<P_expr1> d1, complex<float> d2)
762{
763 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
764 _bz_MatExprConstant<complex<float> >,
765 _bz_Subtract<_bz_typename P_expr1::T_numtype, complex<float> > > T_expr;
766
767 return _bz_MatExpr<T_expr>(T_expr(d1,
768 _bz_MatExprConstant<complex<float> >(d2)));
769}
770#endif // BZ_HAVE_COMPLEX
771
772#ifdef BZ_HAVE_COMPLEX
773// _bz_MatExpr<P_expr1> - complex<double>
774template<class P_expr1>
775inline
776_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
777 _bz_MatExprConstant<complex<double> >, _bz_Subtract<_bz_typename P_expr1::T_numtype, complex<double> > > >
778operator-(_bz_MatExpr<P_expr1> d1, complex<double> d2)
779{
780 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
781 _bz_MatExprConstant<complex<double> >,
782 _bz_Subtract<_bz_typename P_expr1::T_numtype, complex<double> > > T_expr;
783
784 return _bz_MatExpr<T_expr>(T_expr(d1,
785 _bz_MatExprConstant<complex<double> >(d2)));
786}
787#endif // BZ_HAVE_COMPLEX
788
789#ifdef BZ_HAVE_COMPLEX
790// _bz_MatExpr<P_expr1> - complex<long double>
791template<class P_expr1>
792inline
793_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
794 _bz_MatExprConstant<complex<long double> >, _bz_Subtract<_bz_typename P_expr1::T_numtype, complex<long double> > > >
795operator-(_bz_MatExpr<P_expr1> d1, complex<long double> d2)
796{
797 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
798 _bz_MatExprConstant<complex<long double> >,
799 _bz_Subtract<_bz_typename P_expr1::T_numtype, complex<long double> > > T_expr;
800
801 return _bz_MatExpr<T_expr>(T_expr(d1,
802 _bz_MatExprConstant<complex<long double> >(d2)));
803}
804#endif // BZ_HAVE_COMPLEX
805
806// int - Matrix<P_numtype2, P_struct2>
807template<class P_numtype2, class P_struct2>
808inline
809_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
810 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Subtract<int, P_numtype2> > >
811operator-(int d1, const Matrix<P_numtype2, P_struct2>& d2)
812{
813 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
814 _bz_MatrixRef<P_numtype2, P_struct2>,
815 _bz_Subtract<int, P_numtype2> > T_expr;
816
817 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
818 d2._bz_getRef()));
819}
820
821// int - _bz_MatExpr<P_expr2>
822template<class P_expr2>
823inline
824_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
825 _bz_MatExpr<P_expr2>, _bz_Subtract<int, _bz_typename P_expr2::T_numtype> > >
826operator-(int d1, _bz_MatExpr<P_expr2> d2)
827{
828 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
829 _bz_MatExpr<P_expr2>,
830 _bz_Subtract<int, _bz_typename P_expr2::T_numtype> > T_expr;
831
832 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
833 d2));
834}
835
836// float - Matrix<P_numtype2, P_struct2>
837template<class P_numtype2, class P_struct2>
838inline
839_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
840 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Subtract<float, P_numtype2> > >
841operator-(float d1, const Matrix<P_numtype2, P_struct2>& d2)
842{
843 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
844 _bz_MatrixRef<P_numtype2, P_struct2>,
845 _bz_Subtract<float, P_numtype2> > T_expr;
846
847 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
848 d2._bz_getRef()));
849}
850
851// float - _bz_MatExpr<P_expr2>
852template<class P_expr2>
853inline
854_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
855 _bz_MatExpr<P_expr2>, _bz_Subtract<float, _bz_typename P_expr2::T_numtype> > >
856operator-(float d1, _bz_MatExpr<P_expr2> d2)
857{
858 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
859 _bz_MatExpr<P_expr2>,
860 _bz_Subtract<float, _bz_typename P_expr2::T_numtype> > T_expr;
861
862 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
863 d2));
864}
865
866// double - Matrix<P_numtype2, P_struct2>
867template<class P_numtype2, class P_struct2>
868inline
869_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
870 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Subtract<double, P_numtype2> > >
871operator-(double d1, const Matrix<P_numtype2, P_struct2>& d2)
872{
873 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
874 _bz_MatrixRef<P_numtype2, P_struct2>,
875 _bz_Subtract<double, P_numtype2> > T_expr;
876
877 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
878 d2._bz_getRef()));
879}
880
881// double - _bz_MatExpr<P_expr2>
882template<class P_expr2>
883inline
884_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
885 _bz_MatExpr<P_expr2>, _bz_Subtract<double, _bz_typename P_expr2::T_numtype> > >
886operator-(double d1, _bz_MatExpr<P_expr2> d2)
887{
888 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
889 _bz_MatExpr<P_expr2>,
890 _bz_Subtract<double, _bz_typename P_expr2::T_numtype> > T_expr;
891
892 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
893 d2));
894}
895
896// long double - Matrix<P_numtype2, P_struct2>
897template<class P_numtype2, class P_struct2>
898inline
899_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
900 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Subtract<long double, P_numtype2> > >
901operator-(long double d1, const Matrix<P_numtype2, P_struct2>& d2)
902{
903 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
904 _bz_MatrixRef<P_numtype2, P_struct2>,
905 _bz_Subtract<long double, P_numtype2> > T_expr;
906
907 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
908 d2._bz_getRef()));
909}
910
911// long double - _bz_MatExpr<P_expr2>
912template<class P_expr2>
913inline
914_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
915 _bz_MatExpr<P_expr2>, _bz_Subtract<long double, _bz_typename P_expr2::T_numtype> > >
916operator-(long double d1, _bz_MatExpr<P_expr2> d2)
917{
918 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
919 _bz_MatExpr<P_expr2>,
920 _bz_Subtract<long double, _bz_typename P_expr2::T_numtype> > T_expr;
921
922 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
923 d2));
924}
925
926#ifdef BZ_HAVE_COMPLEX
927// complex<float> - Matrix<P_numtype2, P_struct2>
928template<class P_numtype2, class P_struct2>
929inline
930_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
931 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Subtract<complex<float> , P_numtype2> > >
932operator-(complex<float> d1, const Matrix<P_numtype2, P_struct2>& d2)
933{
934 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
935 _bz_MatrixRef<P_numtype2, P_struct2>,
936 _bz_Subtract<complex<float> , P_numtype2> > T_expr;
937
938 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
939 d2._bz_getRef()));
940}
941#endif // BZ_HAVE_COMPLEX
942
943#ifdef BZ_HAVE_COMPLEX
944// complex<float> - _bz_MatExpr<P_expr2>
945template<class P_expr2>
946inline
947_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
948 _bz_MatExpr<P_expr2>, _bz_Subtract<complex<float> , _bz_typename P_expr2::T_numtype> > >
949operator-(complex<float> d1, _bz_MatExpr<P_expr2> d2)
950{
951 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
952 _bz_MatExpr<P_expr2>,
953 _bz_Subtract<complex<float> , _bz_typename P_expr2::T_numtype> > T_expr;
954
955 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
956 d2));
957}
958#endif // BZ_HAVE_COMPLEX
959
960#ifdef BZ_HAVE_COMPLEX
961// complex<double> - Matrix<P_numtype2, P_struct2>
962template<class P_numtype2, class P_struct2>
963inline
964_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
965 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Subtract<complex<double> , P_numtype2> > >
966operator-(complex<double> d1, const Matrix<P_numtype2, P_struct2>& d2)
967{
968 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
969 _bz_MatrixRef<P_numtype2, P_struct2>,
970 _bz_Subtract<complex<double> , P_numtype2> > T_expr;
971
972 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
973 d2._bz_getRef()));
974}
975#endif // BZ_HAVE_COMPLEX
976
977#ifdef BZ_HAVE_COMPLEX
978// complex<double> - _bz_MatExpr<P_expr2>
979template<class P_expr2>
980inline
981_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
982 _bz_MatExpr<P_expr2>, _bz_Subtract<complex<double> , _bz_typename P_expr2::T_numtype> > >
983operator-(complex<double> d1, _bz_MatExpr<P_expr2> d2)
984{
985 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
986 _bz_MatExpr<P_expr2>,
987 _bz_Subtract<complex<double> , _bz_typename P_expr2::T_numtype> > T_expr;
988
989 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
990 d2));
991}
992#endif // BZ_HAVE_COMPLEX
993
994#ifdef BZ_HAVE_COMPLEX
995// complex<long double> - Matrix<P_numtype2, P_struct2>
996template<class P_numtype2, class P_struct2>
997inline
998_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
999 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Subtract<complex<long double> , P_numtype2> > >
1000operator-(complex<long double> d1, const Matrix<P_numtype2, P_struct2>& d2)
1001{
1002 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
1003 _bz_MatrixRef<P_numtype2, P_struct2>,
1004 _bz_Subtract<complex<long double> , P_numtype2> > T_expr;
1005
1006 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
1007 d2._bz_getRef()));
1008}
1009#endif // BZ_HAVE_COMPLEX
1010
1011#ifdef BZ_HAVE_COMPLEX
1012// complex<long double> - _bz_MatExpr<P_expr2>
1013template<class P_expr2>
1014inline
1015_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
1016 _bz_MatExpr<P_expr2>, _bz_Subtract<complex<long double> , _bz_typename P_expr2::T_numtype> > >
1017operator-(complex<long double> d1, _bz_MatExpr<P_expr2> d2)
1018{
1019 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
1020 _bz_MatExpr<P_expr2>,
1021 _bz_Subtract<complex<long double> , _bz_typename P_expr2::T_numtype> > T_expr;
1022
1023 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
1024 d2));
1025}
1026#endif // BZ_HAVE_COMPLEX
1027/****************************************************************************
1028 * Multiplication Operators
1029 ****************************************************************************/
1030
1031// Matrix<P_numtype1, P_struct1> * Matrix<P_numtype2, P_struct2>
1032template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
1033inline
1034_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1035 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Multiply<P_numtype1, P_numtype2> > >
1036operator*(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
1037{
1038 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1039 _bz_MatrixRef<P_numtype2, P_struct2>,
1040 _bz_Multiply<P_numtype1, P_numtype2> > T_expr;
1041
1042 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1043 d2._bz_getRef()));
1044}
1045
1046// Matrix<P_numtype1, P_struct1> * _bz_MatExpr<P_expr2>
1047template<class P_numtype1, class P_struct1, class P_expr2>
1048inline
1049_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1050 _bz_MatExpr<P_expr2>, _bz_Multiply<P_numtype1, _bz_typename P_expr2::T_numtype> > >
1051operator*(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
1052{
1053 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1054 _bz_MatExpr<P_expr2>,
1055 _bz_Multiply<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
1056
1057 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1058 d2));
1059}
1060
1061// Matrix<P_numtype1, P_struct1> * int
1062template<class P_numtype1, class P_struct1>
1063inline
1064_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1065 _bz_MatExprConstant<int>, _bz_Multiply<P_numtype1, int> > >
1066operator*(const Matrix<P_numtype1, P_struct1>& d1, int d2)
1067{
1068 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1069 _bz_MatExprConstant<int>,
1070 _bz_Multiply<P_numtype1, int> > T_expr;
1071
1072 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1073 _bz_MatExprConstant<int>(d2)));
1074}
1075
1076// Matrix<P_numtype1, P_struct1> * float
1077template<class P_numtype1, class P_struct1>
1078inline
1079_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1080 _bz_MatExprConstant<float>, _bz_Multiply<P_numtype1, float> > >
1081operator*(const Matrix<P_numtype1, P_struct1>& d1, float d2)
1082{
1083 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1084 _bz_MatExprConstant<float>,
1085 _bz_Multiply<P_numtype1, float> > T_expr;
1086
1087 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1088 _bz_MatExprConstant<float>(d2)));
1089}
1090
1091// Matrix<P_numtype1, P_struct1> * double
1092template<class P_numtype1, class P_struct1>
1093inline
1094_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1095 _bz_MatExprConstant<double>, _bz_Multiply<P_numtype1, double> > >
1096operator*(const Matrix<P_numtype1, P_struct1>& d1, double d2)
1097{
1098 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1099 _bz_MatExprConstant<double>,
1100 _bz_Multiply<P_numtype1, double> > T_expr;
1101
1102 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1103 _bz_MatExprConstant<double>(d2)));
1104}
1105
1106// Matrix<P_numtype1, P_struct1> * long double
1107template<class P_numtype1, class P_struct1>
1108inline
1109_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1110 _bz_MatExprConstant<long double>, _bz_Multiply<P_numtype1, long double> > >
1111operator*(const Matrix<P_numtype1, P_struct1>& d1, long double d2)
1112{
1113 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1114 _bz_MatExprConstant<long double>,
1115 _bz_Multiply<P_numtype1, long double> > T_expr;
1116
1117 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1118 _bz_MatExprConstant<long double>(d2)));
1119}
1120
1121#ifdef BZ_HAVE_COMPLEX
1122// Matrix<P_numtype1, P_struct1> * complex<float>
1123template<class P_numtype1, class P_struct1>
1124inline
1125_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1126 _bz_MatExprConstant<complex<float> >, _bz_Multiply<P_numtype1, complex<float> > > >
1127operator*(const Matrix<P_numtype1, P_struct1>& d1, complex<float> d2)
1128{
1129 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1130 _bz_MatExprConstant<complex<float> >,
1131 _bz_Multiply<P_numtype1, complex<float> > > T_expr;
1132
1133 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1134 _bz_MatExprConstant<complex<float> >(d2)));
1135}
1136#endif // BZ_HAVE_COMPLEX
1137
1138#ifdef BZ_HAVE_COMPLEX
1139// Matrix<P_numtype1, P_struct1> * complex<double>
1140template<class P_numtype1, class P_struct1>
1141inline
1142_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1143 _bz_MatExprConstant<complex<double> >, _bz_Multiply<P_numtype1, complex<double> > > >
1144operator*(const Matrix<P_numtype1, P_struct1>& d1, complex<double> d2)
1145{
1146 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1147 _bz_MatExprConstant<complex<double> >,
1148 _bz_Multiply<P_numtype1, complex<double> > > T_expr;
1149
1150 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1151 _bz_MatExprConstant<complex<double> >(d2)));
1152}
1153#endif // BZ_HAVE_COMPLEX
1154
1155#ifdef BZ_HAVE_COMPLEX
1156// Matrix<P_numtype1, P_struct1> * complex<long double>
1157template<class P_numtype1, class P_struct1>
1158inline
1159_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1160 _bz_MatExprConstant<complex<long double> >, _bz_Multiply<P_numtype1, complex<long double> > > >
1161operator*(const Matrix<P_numtype1, P_struct1>& d1, complex<long double> d2)
1162{
1163 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1164 _bz_MatExprConstant<complex<long double> >,
1165 _bz_Multiply<P_numtype1, complex<long double> > > T_expr;
1166
1167 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1168 _bz_MatExprConstant<complex<long double> >(d2)));
1169}
1170#endif // BZ_HAVE_COMPLEX
1171
1172// _bz_MatExpr<P_expr1> * Matrix<P_numtype2, P_struct2>
1173template<class P_expr1, class P_numtype2, class P_struct2>
1174inline
1175_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1176 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Multiply<_bz_typename P_expr1::T_numtype, P_numtype2> > >
1177operator*(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
1178{
1179 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1180 _bz_MatrixRef<P_numtype2, P_struct2>,
1181 _bz_Multiply<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
1182
1183 return _bz_MatExpr<T_expr>(T_expr(d1,
1184 d2._bz_getRef()));
1185}
1186
1187// _bz_MatExpr<P_expr1> * _bz_MatExpr<P_expr2>
1188template<class P_expr1, class P_expr2>
1189inline
1190_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1191 _bz_MatExpr<P_expr2>, _bz_Multiply<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
1192operator*(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
1193{
1194 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1195 _bz_MatExpr<P_expr2>,
1196 _bz_Multiply<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
1197
1198 return _bz_MatExpr<T_expr>(T_expr(d1,
1199 d2));
1200}
1201
1202// _bz_MatExpr<P_expr1> * int
1203template<class P_expr1>
1204inline
1205_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1206 _bz_MatExprConstant<int>, _bz_Multiply<_bz_typename P_expr1::T_numtype, int> > >
1207operator*(_bz_MatExpr<P_expr1> d1, int d2)
1208{
1209 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1210 _bz_MatExprConstant<int>,
1211 _bz_Multiply<_bz_typename P_expr1::T_numtype, int> > T_expr;
1212
1213 return _bz_MatExpr<T_expr>(T_expr(d1,
1214 _bz_MatExprConstant<int>(d2)));
1215}
1216
1217// _bz_MatExpr<P_expr1> * float
1218template<class P_expr1>
1219inline
1220_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1221 _bz_MatExprConstant<float>, _bz_Multiply<_bz_typename P_expr1::T_numtype, float> > >
1222operator*(_bz_MatExpr<P_expr1> d1, float d2)
1223{
1224 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1225 _bz_MatExprConstant<float>,
1226 _bz_Multiply<_bz_typename P_expr1::T_numtype, float> > T_expr;
1227
1228 return _bz_MatExpr<T_expr>(T_expr(d1,
1229 _bz_MatExprConstant<float>(d2)));
1230}
1231
1232// _bz_MatExpr<P_expr1> * double
1233template<class P_expr1>
1234inline
1235_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1236 _bz_MatExprConstant<double>, _bz_Multiply<_bz_typename P_expr1::T_numtype, double> > >
1237operator*(_bz_MatExpr<P_expr1> d1, double d2)
1238{
1239 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1240 _bz_MatExprConstant<double>,
1241 _bz_Multiply<_bz_typename P_expr1::T_numtype, double> > T_expr;
1242
1243 return _bz_MatExpr<T_expr>(T_expr(d1,
1244 _bz_MatExprConstant<double>(d2)));
1245}
1246
1247// _bz_MatExpr<P_expr1> * long double
1248template<class P_expr1>
1249inline
1250_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1251 _bz_MatExprConstant<long double>, _bz_Multiply<_bz_typename P_expr1::T_numtype, long double> > >
1252operator*(_bz_MatExpr<P_expr1> d1, long double d2)
1253{
1254 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1255 _bz_MatExprConstant<long double>,
1256 _bz_Multiply<_bz_typename P_expr1::T_numtype, long double> > T_expr;
1257
1258 return _bz_MatExpr<T_expr>(T_expr(d1,
1259 _bz_MatExprConstant<long double>(d2)));
1260}
1261
1262#ifdef BZ_HAVE_COMPLEX
1263// _bz_MatExpr<P_expr1> * complex<float>
1264template<class P_expr1>
1265inline
1266_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1267 _bz_MatExprConstant<complex<float> >, _bz_Multiply<_bz_typename P_expr1::T_numtype, complex<float> > > >
1268operator*(_bz_MatExpr<P_expr1> d1, complex<float> d2)
1269{
1270 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1271 _bz_MatExprConstant<complex<float> >,
1272 _bz_Multiply<_bz_typename P_expr1::T_numtype, complex<float> > > T_expr;
1273
1274 return _bz_MatExpr<T_expr>(T_expr(d1,
1275 _bz_MatExprConstant<complex<float> >(d2)));
1276}
1277#endif // BZ_HAVE_COMPLEX
1278
1279#ifdef BZ_HAVE_COMPLEX
1280// _bz_MatExpr<P_expr1> * complex<double>
1281template<class P_expr1>
1282inline
1283_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1284 _bz_MatExprConstant<complex<double> >, _bz_Multiply<_bz_typename P_expr1::T_numtype, complex<double> > > >
1285operator*(_bz_MatExpr<P_expr1> d1, complex<double> d2)
1286{
1287 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1288 _bz_MatExprConstant<complex<double> >,
1289 _bz_Multiply<_bz_typename P_expr1::T_numtype, complex<double> > > T_expr;
1290
1291 return _bz_MatExpr<T_expr>(T_expr(d1,
1292 _bz_MatExprConstant<complex<double> >(d2)));
1293}
1294#endif // BZ_HAVE_COMPLEX
1295
1296#ifdef BZ_HAVE_COMPLEX
1297// _bz_MatExpr<P_expr1> * complex<long double>
1298template<class P_expr1>
1299inline
1300_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1301 _bz_MatExprConstant<complex<long double> >, _bz_Multiply<_bz_typename P_expr1::T_numtype, complex<long double> > > >
1302operator*(_bz_MatExpr<P_expr1> d1, complex<long double> d2)
1303{
1304 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1305 _bz_MatExprConstant<complex<long double> >,
1306 _bz_Multiply<_bz_typename P_expr1::T_numtype, complex<long double> > > T_expr;
1307
1308 return _bz_MatExpr<T_expr>(T_expr(d1,
1309 _bz_MatExprConstant<complex<long double> >(d2)));
1310}
1311#endif // BZ_HAVE_COMPLEX
1312
1313// int * Matrix<P_numtype2, P_struct2>
1314template<class P_numtype2, class P_struct2>
1315inline
1316_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
1317 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Multiply<int, P_numtype2> > >
1318operator*(int d1, const Matrix<P_numtype2, P_struct2>& d2)
1319{
1320 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
1321 _bz_MatrixRef<P_numtype2, P_struct2>,
1322 _bz_Multiply<int, P_numtype2> > T_expr;
1323
1324 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
1325 d2._bz_getRef()));
1326}
1327
1328// int * _bz_MatExpr<P_expr2>
1329template<class P_expr2>
1330inline
1331_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
1332 _bz_MatExpr<P_expr2>, _bz_Multiply<int, _bz_typename P_expr2::T_numtype> > >
1333operator*(int d1, _bz_MatExpr<P_expr2> d2)
1334{
1335 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
1336 _bz_MatExpr<P_expr2>,
1337 _bz_Multiply<int, _bz_typename P_expr2::T_numtype> > T_expr;
1338
1339 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
1340 d2));
1341}
1342
1343// float * Matrix<P_numtype2, P_struct2>
1344template<class P_numtype2, class P_struct2>
1345inline
1346_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
1347 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Multiply<float, P_numtype2> > >
1348operator*(float d1, const Matrix<P_numtype2, P_struct2>& d2)
1349{
1350 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
1351 _bz_MatrixRef<P_numtype2, P_struct2>,
1352 _bz_Multiply<float, P_numtype2> > T_expr;
1353
1354 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
1355 d2._bz_getRef()));
1356}
1357
1358// float * _bz_MatExpr<P_expr2>
1359template<class P_expr2>
1360inline
1361_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
1362 _bz_MatExpr<P_expr2>, _bz_Multiply<float, _bz_typename P_expr2::T_numtype> > >
1363operator*(float d1, _bz_MatExpr<P_expr2> d2)
1364{
1365 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
1366 _bz_MatExpr<P_expr2>,
1367 _bz_Multiply<float, _bz_typename P_expr2::T_numtype> > T_expr;
1368
1369 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
1370 d2));
1371}
1372
1373// double * Matrix<P_numtype2, P_struct2>
1374template<class P_numtype2, class P_struct2>
1375inline
1376_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
1377 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Multiply<double, P_numtype2> > >
1378operator*(double d1, const Matrix<P_numtype2, P_struct2>& d2)
1379{
1380 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
1381 _bz_MatrixRef<P_numtype2, P_struct2>,
1382 _bz_Multiply<double, P_numtype2> > T_expr;
1383
1384 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
1385 d2._bz_getRef()));
1386}
1387
1388// double * _bz_MatExpr<P_expr2>
1389template<class P_expr2>
1390inline
1391_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
1392 _bz_MatExpr<P_expr2>, _bz_Multiply<double, _bz_typename P_expr2::T_numtype> > >
1393operator*(double d1, _bz_MatExpr<P_expr2> d2)
1394{
1395 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
1396 _bz_MatExpr<P_expr2>,
1397 _bz_Multiply<double, _bz_typename P_expr2::T_numtype> > T_expr;
1398
1399 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
1400 d2));
1401}
1402
1403// long double * Matrix<P_numtype2, P_struct2>
1404template<class P_numtype2, class P_struct2>
1405inline
1406_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
1407 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Multiply<long double, P_numtype2> > >
1408operator*(long double d1, const Matrix<P_numtype2, P_struct2>& d2)
1409{
1410 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
1411 _bz_MatrixRef<P_numtype2, P_struct2>,
1412 _bz_Multiply<long double, P_numtype2> > T_expr;
1413
1414 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
1415 d2._bz_getRef()));
1416}
1417
1418// long double * _bz_MatExpr<P_expr2>
1419template<class P_expr2>
1420inline
1421_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
1422 _bz_MatExpr<P_expr2>, _bz_Multiply<long double, _bz_typename P_expr2::T_numtype> > >
1423operator*(long double d1, _bz_MatExpr<P_expr2> d2)
1424{
1425 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
1426 _bz_MatExpr<P_expr2>,
1427 _bz_Multiply<long double, _bz_typename P_expr2::T_numtype> > T_expr;
1428
1429 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
1430 d2));
1431}
1432
1433#ifdef BZ_HAVE_COMPLEX
1434// complex<float> * Matrix<P_numtype2, P_struct2>
1435template<class P_numtype2, class P_struct2>
1436inline
1437_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
1438 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Multiply<complex<float> , P_numtype2> > >
1439operator*(complex<float> d1, const Matrix<P_numtype2, P_struct2>& d2)
1440{
1441 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
1442 _bz_MatrixRef<P_numtype2, P_struct2>,
1443 _bz_Multiply<complex<float> , P_numtype2> > T_expr;
1444
1445 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
1446 d2._bz_getRef()));
1447}
1448#endif // BZ_HAVE_COMPLEX
1449
1450#ifdef BZ_HAVE_COMPLEX
1451// complex<float> * _bz_MatExpr<P_expr2>
1452template<class P_expr2>
1453inline
1454_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
1455 _bz_MatExpr<P_expr2>, _bz_Multiply<complex<float> , _bz_typename P_expr2::T_numtype> > >
1456operator*(complex<float> d1, _bz_MatExpr<P_expr2> d2)
1457{
1458 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
1459 _bz_MatExpr<P_expr2>,
1460 _bz_Multiply<complex<float> , _bz_typename P_expr2::T_numtype> > T_expr;
1461
1462 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
1463 d2));
1464}
1465#endif // BZ_HAVE_COMPLEX
1466
1467#ifdef BZ_HAVE_COMPLEX
1468// complex<double> * Matrix<P_numtype2, P_struct2>
1469template<class P_numtype2, class P_struct2>
1470inline
1471_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
1472 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Multiply<complex<double> , P_numtype2> > >
1473operator*(complex<double> d1, const Matrix<P_numtype2, P_struct2>& d2)
1474{
1475 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
1476 _bz_MatrixRef<P_numtype2, P_struct2>,
1477 _bz_Multiply<complex<double> , P_numtype2> > T_expr;
1478
1479 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
1480 d2._bz_getRef()));
1481}
1482#endif // BZ_HAVE_COMPLEX
1483
1484#ifdef BZ_HAVE_COMPLEX
1485// complex<double> * _bz_MatExpr<P_expr2>
1486template<class P_expr2>
1487inline
1488_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
1489 _bz_MatExpr<P_expr2>, _bz_Multiply<complex<double> , _bz_typename P_expr2::T_numtype> > >
1490operator*(complex<double> d1, _bz_MatExpr<P_expr2> d2)
1491{
1492 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
1493 _bz_MatExpr<P_expr2>,
1494 _bz_Multiply<complex<double> , _bz_typename P_expr2::T_numtype> > T_expr;
1495
1496 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
1497 d2));
1498}
1499#endif // BZ_HAVE_COMPLEX
1500
1501#ifdef BZ_HAVE_COMPLEX
1502// complex<long double> * Matrix<P_numtype2, P_struct2>
1503template<class P_numtype2, class P_struct2>
1504inline
1505_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
1506 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Multiply<complex<long double> , P_numtype2> > >
1507operator*(complex<long double> d1, const Matrix<P_numtype2, P_struct2>& d2)
1508{
1509 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
1510 _bz_MatrixRef<P_numtype2, P_struct2>,
1511 _bz_Multiply<complex<long double> , P_numtype2> > T_expr;
1512
1513 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
1514 d2._bz_getRef()));
1515}
1516#endif // BZ_HAVE_COMPLEX
1517
1518#ifdef BZ_HAVE_COMPLEX
1519// complex<long double> * _bz_MatExpr<P_expr2>
1520template<class P_expr2>
1521inline
1522_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
1523 _bz_MatExpr<P_expr2>, _bz_Multiply<complex<long double> , _bz_typename P_expr2::T_numtype> > >
1524operator*(complex<long double> d1, _bz_MatExpr<P_expr2> d2)
1525{
1526 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
1527 _bz_MatExpr<P_expr2>,
1528 _bz_Multiply<complex<long double> , _bz_typename P_expr2::T_numtype> > T_expr;
1529
1530 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
1531 d2));
1532}
1533#endif // BZ_HAVE_COMPLEX
1534/****************************************************************************
1535 * Division Operators
1536 ****************************************************************************/
1537
1538// Matrix<P_numtype1, P_struct1> / Matrix<P_numtype2, P_struct2>
1539template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
1540inline
1541_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1542 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Divide<P_numtype1, P_numtype2> > >
1543operator/(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
1544{
1545 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1546 _bz_MatrixRef<P_numtype2, P_struct2>,
1547 _bz_Divide<P_numtype1, P_numtype2> > T_expr;
1548
1549 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1550 d2._bz_getRef()));
1551}
1552
1553// Matrix<P_numtype1, P_struct1> / _bz_MatExpr<P_expr2>
1554template<class P_numtype1, class P_struct1, class P_expr2>
1555inline
1556_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1557 _bz_MatExpr<P_expr2>, _bz_Divide<P_numtype1, _bz_typename P_expr2::T_numtype> > >
1558operator/(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
1559{
1560 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1561 _bz_MatExpr<P_expr2>,
1562 _bz_Divide<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
1563
1564 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1565 d2));
1566}
1567
1568// Matrix<P_numtype1, P_struct1> / int
1569template<class P_numtype1, class P_struct1>
1570inline
1571_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1572 _bz_MatExprConstant<int>, _bz_Divide<P_numtype1, int> > >
1573operator/(const Matrix<P_numtype1, P_struct1>& d1, int d2)
1574{
1575 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1576 _bz_MatExprConstant<int>,
1577 _bz_Divide<P_numtype1, int> > T_expr;
1578
1579 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1580 _bz_MatExprConstant<int>(d2)));
1581}
1582
1583// Matrix<P_numtype1, P_struct1> / float
1584template<class P_numtype1, class P_struct1>
1585inline
1586_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1587 _bz_MatExprConstant<float>, _bz_Divide<P_numtype1, float> > >
1588operator/(const Matrix<P_numtype1, P_struct1>& d1, float d2)
1589{
1590 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1591 _bz_MatExprConstant<float>,
1592 _bz_Divide<P_numtype1, float> > T_expr;
1593
1594 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1595 _bz_MatExprConstant<float>(d2)));
1596}
1597
1598// Matrix<P_numtype1, P_struct1> / double
1599template<class P_numtype1, class P_struct1>
1600inline
1601_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1602 _bz_MatExprConstant<double>, _bz_Divide<P_numtype1, double> > >
1603operator/(const Matrix<P_numtype1, P_struct1>& d1, double d2)
1604{
1605 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1606 _bz_MatExprConstant<double>,
1607 _bz_Divide<P_numtype1, double> > T_expr;
1608
1609 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1610 _bz_MatExprConstant<double>(d2)));
1611}
1612
1613// Matrix<P_numtype1, P_struct1> / long double
1614template<class P_numtype1, class P_struct1>
1615inline
1616_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1617 _bz_MatExprConstant<long double>, _bz_Divide<P_numtype1, long double> > >
1618operator/(const Matrix<P_numtype1, P_struct1>& d1, long double d2)
1619{
1620 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1621 _bz_MatExprConstant<long double>,
1622 _bz_Divide<P_numtype1, long double> > T_expr;
1623
1624 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1625 _bz_MatExprConstant<long double>(d2)));
1626}
1627
1628#ifdef BZ_HAVE_COMPLEX
1629// Matrix<P_numtype1, P_struct1> / complex<float>
1630template<class P_numtype1, class P_struct1>
1631inline
1632_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1633 _bz_MatExprConstant<complex<float> >, _bz_Divide<P_numtype1, complex<float> > > >
1634operator/(const Matrix<P_numtype1, P_struct1>& d1, complex<float> d2)
1635{
1636 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1637 _bz_MatExprConstant<complex<float> >,
1638 _bz_Divide<P_numtype1, complex<float> > > T_expr;
1639
1640 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1641 _bz_MatExprConstant<complex<float> >(d2)));
1642}
1643#endif // BZ_HAVE_COMPLEX
1644
1645#ifdef BZ_HAVE_COMPLEX
1646// Matrix<P_numtype1, P_struct1> / complex<double>
1647template<class P_numtype1, class P_struct1>
1648inline
1649_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1650 _bz_MatExprConstant<complex<double> >, _bz_Divide<P_numtype1, complex<double> > > >
1651operator/(const Matrix<P_numtype1, P_struct1>& d1, complex<double> d2)
1652{
1653 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1654 _bz_MatExprConstant<complex<double> >,
1655 _bz_Divide<P_numtype1, complex<double> > > T_expr;
1656
1657 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1658 _bz_MatExprConstant<complex<double> >(d2)));
1659}
1660#endif // BZ_HAVE_COMPLEX
1661
1662#ifdef BZ_HAVE_COMPLEX
1663// Matrix<P_numtype1, P_struct1> / complex<long double>
1664template<class P_numtype1, class P_struct1>
1665inline
1666_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1667 _bz_MatExprConstant<complex<long double> >, _bz_Divide<P_numtype1, complex<long double> > > >
1668operator/(const Matrix<P_numtype1, P_struct1>& d1, complex<long double> d2)
1669{
1670 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
1671 _bz_MatExprConstant<complex<long double> >,
1672 _bz_Divide<P_numtype1, complex<long double> > > T_expr;
1673
1674 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
1675 _bz_MatExprConstant<complex<long double> >(d2)));
1676}
1677#endif // BZ_HAVE_COMPLEX
1678
1679// _bz_MatExpr<P_expr1> / Matrix<P_numtype2, P_struct2>
1680template<class P_expr1, class P_numtype2, class P_struct2>
1681inline
1682_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1683 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Divide<_bz_typename P_expr1::T_numtype, P_numtype2> > >
1684operator/(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
1685{
1686 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1687 _bz_MatrixRef<P_numtype2, P_struct2>,
1688 _bz_Divide<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
1689
1690 return _bz_MatExpr<T_expr>(T_expr(d1,
1691 d2._bz_getRef()));
1692}
1693
1694// _bz_MatExpr<P_expr1> / _bz_MatExpr<P_expr2>
1695template<class P_expr1, class P_expr2>
1696inline
1697_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1698 _bz_MatExpr<P_expr2>, _bz_Divide<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
1699operator/(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
1700{
1701 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1702 _bz_MatExpr<P_expr2>,
1703 _bz_Divide<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
1704
1705 return _bz_MatExpr<T_expr>(T_expr(d1,
1706 d2));
1707}
1708
1709// _bz_MatExpr<P_expr1> / int
1710template<class P_expr1>
1711inline
1712_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1713 _bz_MatExprConstant<int>, _bz_Divide<_bz_typename P_expr1::T_numtype, int> > >
1714operator/(_bz_MatExpr<P_expr1> d1, int d2)
1715{
1716 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1717 _bz_MatExprConstant<int>,
1718 _bz_Divide<_bz_typename P_expr1::T_numtype, int> > T_expr;
1719
1720 return _bz_MatExpr<T_expr>(T_expr(d1,
1721 _bz_MatExprConstant<int>(d2)));
1722}
1723
1724// _bz_MatExpr<P_expr1> / float
1725template<class P_expr1>
1726inline
1727_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1728 _bz_MatExprConstant<float>, _bz_Divide<_bz_typename P_expr1::T_numtype, float> > >
1729operator/(_bz_MatExpr<P_expr1> d1, float d2)
1730{
1731 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1732 _bz_MatExprConstant<float>,
1733 _bz_Divide<_bz_typename P_expr1::T_numtype, float> > T_expr;
1734
1735 return _bz_MatExpr<T_expr>(T_expr(d1,
1736 _bz_MatExprConstant<float>(d2)));
1737}
1738
1739// _bz_MatExpr<P_expr1> / double
1740template<class P_expr1>
1741inline
1742_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1743 _bz_MatExprConstant<double>, _bz_Divide<_bz_typename P_expr1::T_numtype, double> > >
1744operator/(_bz_MatExpr<P_expr1> d1, double d2)
1745{
1746 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1747 _bz_MatExprConstant<double>,
1748 _bz_Divide<_bz_typename P_expr1::T_numtype, double> > T_expr;
1749
1750 return _bz_MatExpr<T_expr>(T_expr(d1,
1751 _bz_MatExprConstant<double>(d2)));
1752}
1753
1754// _bz_MatExpr<P_expr1> / long double
1755template<class P_expr1>
1756inline
1757_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1758 _bz_MatExprConstant<long double>, _bz_Divide<_bz_typename P_expr1::T_numtype, long double> > >
1759operator/(_bz_MatExpr<P_expr1> d1, long double d2)
1760{
1761 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1762 _bz_MatExprConstant<long double>,
1763 _bz_Divide<_bz_typename P_expr1::T_numtype, long double> > T_expr;
1764
1765 return _bz_MatExpr<T_expr>(T_expr(d1,
1766 _bz_MatExprConstant<long double>(d2)));
1767}
1768
1769#ifdef BZ_HAVE_COMPLEX
1770// _bz_MatExpr<P_expr1> / complex<float>
1771template<class P_expr1>
1772inline
1773_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1774 _bz_MatExprConstant<complex<float> >, _bz_Divide<_bz_typename P_expr1::T_numtype, complex<float> > > >
1775operator/(_bz_MatExpr<P_expr1> d1, complex<float> d2)
1776{
1777 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1778 _bz_MatExprConstant<complex<float> >,
1779 _bz_Divide<_bz_typename P_expr1::T_numtype, complex<float> > > T_expr;
1780
1781 return _bz_MatExpr<T_expr>(T_expr(d1,
1782 _bz_MatExprConstant<complex<float> >(d2)));
1783}
1784#endif // BZ_HAVE_COMPLEX
1785
1786#ifdef BZ_HAVE_COMPLEX
1787// _bz_MatExpr<P_expr1> / complex<double>
1788template<class P_expr1>
1789inline
1790_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1791 _bz_MatExprConstant<complex<double> >, _bz_Divide<_bz_typename P_expr1::T_numtype, complex<double> > > >
1792operator/(_bz_MatExpr<P_expr1> d1, complex<double> d2)
1793{
1794 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1795 _bz_MatExprConstant<complex<double> >,
1796 _bz_Divide<_bz_typename P_expr1::T_numtype, complex<double> > > T_expr;
1797
1798 return _bz_MatExpr<T_expr>(T_expr(d1,
1799 _bz_MatExprConstant<complex<double> >(d2)));
1800}
1801#endif // BZ_HAVE_COMPLEX
1802
1803#ifdef BZ_HAVE_COMPLEX
1804// _bz_MatExpr<P_expr1> / complex<long double>
1805template<class P_expr1>
1806inline
1807_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
1808 _bz_MatExprConstant<complex<long double> >, _bz_Divide<_bz_typename P_expr1::T_numtype, complex<long double> > > >
1809operator/(_bz_MatExpr<P_expr1> d1, complex<long double> d2)
1810{
1811 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
1812 _bz_MatExprConstant<complex<long double> >,
1813 _bz_Divide<_bz_typename P_expr1::T_numtype, complex<long double> > > T_expr;
1814
1815 return _bz_MatExpr<T_expr>(T_expr(d1,
1816 _bz_MatExprConstant<complex<long double> >(d2)));
1817}
1818#endif // BZ_HAVE_COMPLEX
1819
1820// int / Matrix<P_numtype2, P_struct2>
1821template<class P_numtype2, class P_struct2>
1822inline
1823_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
1824 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Divide<int, P_numtype2> > >
1825operator/(int d1, const Matrix<P_numtype2, P_struct2>& d2)
1826{
1827 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
1828 _bz_MatrixRef<P_numtype2, P_struct2>,
1829 _bz_Divide<int, P_numtype2> > T_expr;
1830
1831 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
1832 d2._bz_getRef()));
1833}
1834
1835// int / _bz_MatExpr<P_expr2>
1836template<class P_expr2>
1837inline
1838_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
1839 _bz_MatExpr<P_expr2>, _bz_Divide<int, _bz_typename P_expr2::T_numtype> > >
1840operator/(int d1, _bz_MatExpr<P_expr2> d2)
1841{
1842 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
1843 _bz_MatExpr<P_expr2>,
1844 _bz_Divide<int, _bz_typename P_expr2::T_numtype> > T_expr;
1845
1846 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
1847 d2));
1848}
1849
1850// float / Matrix<P_numtype2, P_struct2>
1851template<class P_numtype2, class P_struct2>
1852inline
1853_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
1854 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Divide<float, P_numtype2> > >
1855operator/(float d1, const Matrix<P_numtype2, P_struct2>& d2)
1856{
1857 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
1858 _bz_MatrixRef<P_numtype2, P_struct2>,
1859 _bz_Divide<float, P_numtype2> > T_expr;
1860
1861 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
1862 d2._bz_getRef()));
1863}
1864
1865// float / _bz_MatExpr<P_expr2>
1866template<class P_expr2>
1867inline
1868_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
1869 _bz_MatExpr<P_expr2>, _bz_Divide<float, _bz_typename P_expr2::T_numtype> > >
1870operator/(float d1, _bz_MatExpr<P_expr2> d2)
1871{
1872 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
1873 _bz_MatExpr<P_expr2>,
1874 _bz_Divide<float, _bz_typename P_expr2::T_numtype> > T_expr;
1875
1876 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
1877 d2));
1878}
1879
1880// double / Matrix<P_numtype2, P_struct2>
1881template<class P_numtype2, class P_struct2>
1882inline
1883_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
1884 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Divide<double, P_numtype2> > >
1885operator/(double d1, const Matrix<P_numtype2, P_struct2>& d2)
1886{
1887 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
1888 _bz_MatrixRef<P_numtype2, P_struct2>,
1889 _bz_Divide<double, P_numtype2> > T_expr;
1890
1891 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
1892 d2._bz_getRef()));
1893}
1894
1895// double / _bz_MatExpr<P_expr2>
1896template<class P_expr2>
1897inline
1898_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
1899 _bz_MatExpr<P_expr2>, _bz_Divide<double, _bz_typename P_expr2::T_numtype> > >
1900operator/(double d1, _bz_MatExpr<P_expr2> d2)
1901{
1902 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
1903 _bz_MatExpr<P_expr2>,
1904 _bz_Divide<double, _bz_typename P_expr2::T_numtype> > T_expr;
1905
1906 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
1907 d2));
1908}
1909
1910// long double / Matrix<P_numtype2, P_struct2>
1911template<class P_numtype2, class P_struct2>
1912inline
1913_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
1914 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Divide<long double, P_numtype2> > >
1915operator/(long double d1, const Matrix<P_numtype2, P_struct2>& d2)
1916{
1917 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
1918 _bz_MatrixRef<P_numtype2, P_struct2>,
1919 _bz_Divide<long double, P_numtype2> > T_expr;
1920
1921 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
1922 d2._bz_getRef()));
1923}
1924
1925// long double / _bz_MatExpr<P_expr2>
1926template<class P_expr2>
1927inline
1928_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
1929 _bz_MatExpr<P_expr2>, _bz_Divide<long double, _bz_typename P_expr2::T_numtype> > >
1930operator/(long double d1, _bz_MatExpr<P_expr2> d2)
1931{
1932 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
1933 _bz_MatExpr<P_expr2>,
1934 _bz_Divide<long double, _bz_typename P_expr2::T_numtype> > T_expr;
1935
1936 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
1937 d2));
1938}
1939
1940#ifdef BZ_HAVE_COMPLEX
1941// complex<float> / Matrix<P_numtype2, P_struct2>
1942template<class P_numtype2, class P_struct2>
1943inline
1944_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
1945 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Divide<complex<float> , P_numtype2> > >
1946operator/(complex<float> d1, const Matrix<P_numtype2, P_struct2>& d2)
1947{
1948 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
1949 _bz_MatrixRef<P_numtype2, P_struct2>,
1950 _bz_Divide<complex<float> , P_numtype2> > T_expr;
1951
1952 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
1953 d2._bz_getRef()));
1954}
1955#endif // BZ_HAVE_COMPLEX
1956
1957#ifdef BZ_HAVE_COMPLEX
1958// complex<float> / _bz_MatExpr<P_expr2>
1959template<class P_expr2>
1960inline
1961_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
1962 _bz_MatExpr<P_expr2>, _bz_Divide<complex<float> , _bz_typename P_expr2::T_numtype> > >
1963operator/(complex<float> d1, _bz_MatExpr<P_expr2> d2)
1964{
1965 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
1966 _bz_MatExpr<P_expr2>,
1967 _bz_Divide<complex<float> , _bz_typename P_expr2::T_numtype> > T_expr;
1968
1969 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
1970 d2));
1971}
1972#endif // BZ_HAVE_COMPLEX
1973
1974#ifdef BZ_HAVE_COMPLEX
1975// complex<double> / Matrix<P_numtype2, P_struct2>
1976template<class P_numtype2, class P_struct2>
1977inline
1978_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
1979 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Divide<complex<double> , P_numtype2> > >
1980operator/(complex<double> d1, const Matrix<P_numtype2, P_struct2>& d2)
1981{
1982 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
1983 _bz_MatrixRef<P_numtype2, P_struct2>,
1984 _bz_Divide<complex<double> , P_numtype2> > T_expr;
1985
1986 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
1987 d2._bz_getRef()));
1988}
1989#endif // BZ_HAVE_COMPLEX
1990
1991#ifdef BZ_HAVE_COMPLEX
1992// complex<double> / _bz_MatExpr<P_expr2>
1993template<class P_expr2>
1994inline
1995_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
1996 _bz_MatExpr<P_expr2>, _bz_Divide<complex<double> , _bz_typename P_expr2::T_numtype> > >
1997operator/(complex<double> d1, _bz_MatExpr<P_expr2> d2)
1998{
1999 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
2000 _bz_MatExpr<P_expr2>,
2001 _bz_Divide<complex<double> , _bz_typename P_expr2::T_numtype> > T_expr;
2002
2003 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
2004 d2));
2005}
2006#endif // BZ_HAVE_COMPLEX
2007
2008#ifdef BZ_HAVE_COMPLEX
2009// complex<long double> / Matrix<P_numtype2, P_struct2>
2010template<class P_numtype2, class P_struct2>
2011inline
2012_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
2013 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Divide<complex<long double> , P_numtype2> > >
2014operator/(complex<long double> d1, const Matrix<P_numtype2, P_struct2>& d2)
2015{
2016 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
2017 _bz_MatrixRef<P_numtype2, P_struct2>,
2018 _bz_Divide<complex<long double> , P_numtype2> > T_expr;
2019
2020 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
2021 d2._bz_getRef()));
2022}
2023#endif // BZ_HAVE_COMPLEX
2024
2025#ifdef BZ_HAVE_COMPLEX
2026// complex<long double> / _bz_MatExpr<P_expr2>
2027template<class P_expr2>
2028inline
2029_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
2030 _bz_MatExpr<P_expr2>, _bz_Divide<complex<long double> , _bz_typename P_expr2::T_numtype> > >
2031operator/(complex<long double> d1, _bz_MatExpr<P_expr2> d2)
2032{
2033 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
2034 _bz_MatExpr<P_expr2>,
2035 _bz_Divide<complex<long double> , _bz_typename P_expr2::T_numtype> > T_expr;
2036
2037 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
2038 d2));
2039}
2040#endif // BZ_HAVE_COMPLEX
2041/****************************************************************************
2042 * Modulus Operators
2043 ****************************************************************************/
2044
2045// Matrix<P_numtype1, P_struct1> % Matrix<P_numtype2, P_struct2>
2046template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
2047inline
2048_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2049 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Mod<P_numtype1, P_numtype2> > >
2050operator%(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
2051{
2052 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2053 _bz_MatrixRef<P_numtype2, P_struct2>,
2054 _bz_Mod<P_numtype1, P_numtype2> > T_expr;
2055
2056 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2057 d2._bz_getRef()));
2058}
2059
2060// Matrix<P_numtype1, P_struct1> % _bz_MatExpr<P_expr2>
2061template<class P_numtype1, class P_struct1, class P_expr2>
2062inline
2063_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2064 _bz_MatExpr<P_expr2>, _bz_Mod<P_numtype1, _bz_typename P_expr2::T_numtype> > >
2065operator%(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
2066{
2067 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2068 _bz_MatExpr<P_expr2>,
2069 _bz_Mod<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
2070
2071 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2072 d2));
2073}
2074
2075// Matrix<P_numtype1, P_struct1> % int
2076template<class P_numtype1, class P_struct1>
2077inline
2078_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2079 _bz_MatExprConstant<int>, _bz_Mod<P_numtype1, int> > >
2080operator%(const Matrix<P_numtype1, P_struct1>& d1, int d2)
2081{
2082 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2083 _bz_MatExprConstant<int>,
2084 _bz_Mod<P_numtype1, int> > T_expr;
2085
2086 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2087 _bz_MatExprConstant<int>(d2)));
2088}
2089
2090// _bz_MatExpr<P_expr1> % Matrix<P_numtype2, P_struct2>
2091template<class P_expr1, class P_numtype2, class P_struct2>
2092inline
2093_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2094 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Mod<_bz_typename P_expr1::T_numtype, P_numtype2> > >
2095operator%(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
2096{
2097 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2098 _bz_MatrixRef<P_numtype2, P_struct2>,
2099 _bz_Mod<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
2100
2101 return _bz_MatExpr<T_expr>(T_expr(d1,
2102 d2._bz_getRef()));
2103}
2104
2105// _bz_MatExpr<P_expr1> % _bz_MatExpr<P_expr2>
2106template<class P_expr1, class P_expr2>
2107inline
2108_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2109 _bz_MatExpr<P_expr2>, _bz_Mod<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
2110operator%(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
2111{
2112 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2113 _bz_MatExpr<P_expr2>,
2114 _bz_Mod<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
2115
2116 return _bz_MatExpr<T_expr>(T_expr(d1,
2117 d2));
2118}
2119
2120// _bz_MatExpr<P_expr1> % int
2121template<class P_expr1>
2122inline
2123_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2124 _bz_MatExprConstant<int>, _bz_Mod<_bz_typename P_expr1::T_numtype, int> > >
2125operator%(_bz_MatExpr<P_expr1> d1, int d2)
2126{
2127 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2128 _bz_MatExprConstant<int>,
2129 _bz_Mod<_bz_typename P_expr1::T_numtype, int> > T_expr;
2130
2131 return _bz_MatExpr<T_expr>(T_expr(d1,
2132 _bz_MatExprConstant<int>(d2)));
2133}
2134
2135// int % Matrix<P_numtype2, P_struct2>
2136template<class P_numtype2, class P_struct2>
2137inline
2138_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2139 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Mod<int, P_numtype2> > >
2140operator%(int d1, const Matrix<P_numtype2, P_struct2>& d2)
2141{
2142 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2143 _bz_MatrixRef<P_numtype2, P_struct2>,
2144 _bz_Mod<int, P_numtype2> > T_expr;
2145
2146 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2147 d2._bz_getRef()));
2148}
2149
2150// int % _bz_MatExpr<P_expr2>
2151template<class P_expr2>
2152inline
2153_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2154 _bz_MatExpr<P_expr2>, _bz_Mod<int, _bz_typename P_expr2::T_numtype> > >
2155operator%(int d1, _bz_MatExpr<P_expr2> d2)
2156{
2157 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2158 _bz_MatExpr<P_expr2>,
2159 _bz_Mod<int, _bz_typename P_expr2::T_numtype> > T_expr;
2160
2161 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2162 d2));
2163}
2164/****************************************************************************
2165 * Bitwise XOR Operators
2166 ****************************************************************************/
2167
2168// Matrix<P_numtype1, P_struct1> ^ Matrix<P_numtype2, P_struct2>
2169template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
2170inline
2171_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2172 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_BitwiseXOR<P_numtype1, P_numtype2> > >
2173operator^(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
2174{
2175 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2176 _bz_MatrixRef<P_numtype2, P_struct2>,
2177 _bz_BitwiseXOR<P_numtype1, P_numtype2> > T_expr;
2178
2179 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2180 d2._bz_getRef()));
2181}
2182
2183// Matrix<P_numtype1, P_struct1> ^ _bz_MatExpr<P_expr2>
2184template<class P_numtype1, class P_struct1, class P_expr2>
2185inline
2186_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2187 _bz_MatExpr<P_expr2>, _bz_BitwiseXOR<P_numtype1, _bz_typename P_expr2::T_numtype> > >
2188operator^(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
2189{
2190 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2191 _bz_MatExpr<P_expr2>,
2192 _bz_BitwiseXOR<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
2193
2194 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2195 d2));
2196}
2197
2198// Matrix<P_numtype1, P_struct1> ^ int
2199template<class P_numtype1, class P_struct1>
2200inline
2201_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2202 _bz_MatExprConstant<int>, _bz_BitwiseXOR<P_numtype1, int> > >
2203operator^(const Matrix<P_numtype1, P_struct1>& d1, int d2)
2204{
2205 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2206 _bz_MatExprConstant<int>,
2207 _bz_BitwiseXOR<P_numtype1, int> > T_expr;
2208
2209 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2210 _bz_MatExprConstant<int>(d2)));
2211}
2212
2213// _bz_MatExpr<P_expr1> ^ Matrix<P_numtype2, P_struct2>
2214template<class P_expr1, class P_numtype2, class P_struct2>
2215inline
2216_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2217 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_BitwiseXOR<_bz_typename P_expr1::T_numtype, P_numtype2> > >
2218operator^(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
2219{
2220 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2221 _bz_MatrixRef<P_numtype2, P_struct2>,
2222 _bz_BitwiseXOR<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
2223
2224 return _bz_MatExpr<T_expr>(T_expr(d1,
2225 d2._bz_getRef()));
2226}
2227
2228// _bz_MatExpr<P_expr1> ^ _bz_MatExpr<P_expr2>
2229template<class P_expr1, class P_expr2>
2230inline
2231_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2232 _bz_MatExpr<P_expr2>, _bz_BitwiseXOR<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
2233operator^(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
2234{
2235 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2236 _bz_MatExpr<P_expr2>,
2237 _bz_BitwiseXOR<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
2238
2239 return _bz_MatExpr<T_expr>(T_expr(d1,
2240 d2));
2241}
2242
2243// _bz_MatExpr<P_expr1> ^ int
2244template<class P_expr1>
2245inline
2246_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2247 _bz_MatExprConstant<int>, _bz_BitwiseXOR<_bz_typename P_expr1::T_numtype, int> > >
2248operator^(_bz_MatExpr<P_expr1> d1, int d2)
2249{
2250 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2251 _bz_MatExprConstant<int>,
2252 _bz_BitwiseXOR<_bz_typename P_expr1::T_numtype, int> > T_expr;
2253
2254 return _bz_MatExpr<T_expr>(T_expr(d1,
2255 _bz_MatExprConstant<int>(d2)));
2256}
2257
2258// int ^ Matrix<P_numtype2, P_struct2>
2259template<class P_numtype2, class P_struct2>
2260inline
2261_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2262 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_BitwiseXOR<int, P_numtype2> > >
2263operator^(int d1, const Matrix<P_numtype2, P_struct2>& d2)
2264{
2265 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2266 _bz_MatrixRef<P_numtype2, P_struct2>,
2267 _bz_BitwiseXOR<int, P_numtype2> > T_expr;
2268
2269 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2270 d2._bz_getRef()));
2271}
2272
2273// int ^ _bz_MatExpr<P_expr2>
2274template<class P_expr2>
2275inline
2276_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2277 _bz_MatExpr<P_expr2>, _bz_BitwiseXOR<int, _bz_typename P_expr2::T_numtype> > >
2278operator^(int d1, _bz_MatExpr<P_expr2> d2)
2279{
2280 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2281 _bz_MatExpr<P_expr2>,
2282 _bz_BitwiseXOR<int, _bz_typename P_expr2::T_numtype> > T_expr;
2283
2284 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2285 d2));
2286}
2287/****************************************************************************
2288 * Bitwise And Operators
2289 ****************************************************************************/
2290
2291// Matrix<P_numtype1, P_struct1> & Matrix<P_numtype2, P_struct2>
2292template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
2293inline
2294_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2295 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_BitwiseAnd<P_numtype1, P_numtype2> > >
2296operator&(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
2297{
2298 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2299 _bz_MatrixRef<P_numtype2, P_struct2>,
2300 _bz_BitwiseAnd<P_numtype1, P_numtype2> > T_expr;
2301
2302 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2303 d2._bz_getRef()));
2304}
2305
2306// Matrix<P_numtype1, P_struct1> & _bz_MatExpr<P_expr2>
2307template<class P_numtype1, class P_struct1, class P_expr2>
2308inline
2309_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2310 _bz_MatExpr<P_expr2>, _bz_BitwiseAnd<P_numtype1, _bz_typename P_expr2::T_numtype> > >
2311operator&(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
2312{
2313 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2314 _bz_MatExpr<P_expr2>,
2315 _bz_BitwiseAnd<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
2316
2317 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2318 d2));
2319}
2320
2321// Matrix<P_numtype1, P_struct1> & int
2322template<class P_numtype1, class P_struct1>
2323inline
2324_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2325 _bz_MatExprConstant<int>, _bz_BitwiseAnd<P_numtype1, int> > >
2326operator&(const Matrix<P_numtype1, P_struct1>& d1, int d2)
2327{
2328 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2329 _bz_MatExprConstant<int>,
2330 _bz_BitwiseAnd<P_numtype1, int> > T_expr;
2331
2332 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2333 _bz_MatExprConstant<int>(d2)));
2334}
2335
2336// _bz_MatExpr<P_expr1> & Matrix<P_numtype2, P_struct2>
2337template<class P_expr1, class P_numtype2, class P_struct2>
2338inline
2339_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2340 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_BitwiseAnd<_bz_typename P_expr1::T_numtype, P_numtype2> > >
2341operator&(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
2342{
2343 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2344 _bz_MatrixRef<P_numtype2, P_struct2>,
2345 _bz_BitwiseAnd<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
2346
2347 return _bz_MatExpr<T_expr>(T_expr(d1,
2348 d2._bz_getRef()));
2349}
2350
2351// _bz_MatExpr<P_expr1> & _bz_MatExpr<P_expr2>
2352template<class P_expr1, class P_expr2>
2353inline
2354_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2355 _bz_MatExpr<P_expr2>, _bz_BitwiseAnd<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
2356operator&(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
2357{
2358 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2359 _bz_MatExpr<P_expr2>,
2360 _bz_BitwiseAnd<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
2361
2362 return _bz_MatExpr<T_expr>(T_expr(d1,
2363 d2));
2364}
2365
2366// _bz_MatExpr<P_expr1> & int
2367template<class P_expr1>
2368inline
2369_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2370 _bz_MatExprConstant<int>, _bz_BitwiseAnd<_bz_typename P_expr1::T_numtype, int> > >
2371operator&(_bz_MatExpr<P_expr1> d1, int d2)
2372{
2373 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2374 _bz_MatExprConstant<int>,
2375 _bz_BitwiseAnd<_bz_typename P_expr1::T_numtype, int> > T_expr;
2376
2377 return _bz_MatExpr<T_expr>(T_expr(d1,
2378 _bz_MatExprConstant<int>(d2)));
2379}
2380
2381// int & Matrix<P_numtype2, P_struct2>
2382template<class P_numtype2, class P_struct2>
2383inline
2384_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2385 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_BitwiseAnd<int, P_numtype2> > >
2386operator&(int d1, const Matrix<P_numtype2, P_struct2>& d2)
2387{
2388 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2389 _bz_MatrixRef<P_numtype2, P_struct2>,
2390 _bz_BitwiseAnd<int, P_numtype2> > T_expr;
2391
2392 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2393 d2._bz_getRef()));
2394}
2395
2396// int & _bz_MatExpr<P_expr2>
2397template<class P_expr2>
2398inline
2399_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2400 _bz_MatExpr<P_expr2>, _bz_BitwiseAnd<int, _bz_typename P_expr2::T_numtype> > >
2401operator&(int d1, _bz_MatExpr<P_expr2> d2)
2402{
2403 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2404 _bz_MatExpr<P_expr2>,
2405 _bz_BitwiseAnd<int, _bz_typename P_expr2::T_numtype> > T_expr;
2406
2407 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2408 d2));
2409}
2410/****************************************************************************
2411 * Bitwise Or Operators
2412 ****************************************************************************/
2413
2414// Matrix<P_numtype1, P_struct1> | Matrix<P_numtype2, P_struct2>
2415template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
2416inline
2417_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2418 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_BitwiseOr<P_numtype1, P_numtype2> > >
2419operator|(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
2420{
2421 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2422 _bz_MatrixRef<P_numtype2, P_struct2>,
2423 _bz_BitwiseOr<P_numtype1, P_numtype2> > T_expr;
2424
2425 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2426 d2._bz_getRef()));
2427}
2428
2429// Matrix<P_numtype1, P_struct1> | _bz_MatExpr<P_expr2>
2430template<class P_numtype1, class P_struct1, class P_expr2>
2431inline
2432_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2433 _bz_MatExpr<P_expr2>, _bz_BitwiseOr<P_numtype1, _bz_typename P_expr2::T_numtype> > >
2434operator|(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
2435{
2436 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2437 _bz_MatExpr<P_expr2>,
2438 _bz_BitwiseOr<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
2439
2440 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2441 d2));
2442}
2443
2444// Matrix<P_numtype1, P_struct1> | int
2445template<class P_numtype1, class P_struct1>
2446inline
2447_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2448 _bz_MatExprConstant<int>, _bz_BitwiseOr<P_numtype1, int> > >
2449operator|(const Matrix<P_numtype1, P_struct1>& d1, int d2)
2450{
2451 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2452 _bz_MatExprConstant<int>,
2453 _bz_BitwiseOr<P_numtype1, int> > T_expr;
2454
2455 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2456 _bz_MatExprConstant<int>(d2)));
2457}
2458
2459// _bz_MatExpr<P_expr1> | Matrix<P_numtype2, P_struct2>
2460template<class P_expr1, class P_numtype2, class P_struct2>
2461inline
2462_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2463 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_BitwiseOr<_bz_typename P_expr1::T_numtype, P_numtype2> > >
2464operator|(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
2465{
2466 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2467 _bz_MatrixRef<P_numtype2, P_struct2>,
2468 _bz_BitwiseOr<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
2469
2470 return _bz_MatExpr<T_expr>(T_expr(d1,
2471 d2._bz_getRef()));
2472}
2473
2474// _bz_MatExpr<P_expr1> | _bz_MatExpr<P_expr2>
2475template<class P_expr1, class P_expr2>
2476inline
2477_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2478 _bz_MatExpr<P_expr2>, _bz_BitwiseOr<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
2479operator|(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
2480{
2481 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2482 _bz_MatExpr<P_expr2>,
2483 _bz_BitwiseOr<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
2484
2485 return _bz_MatExpr<T_expr>(T_expr(d1,
2486 d2));
2487}
2488
2489// _bz_MatExpr<P_expr1> | int
2490template<class P_expr1>
2491inline
2492_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2493 _bz_MatExprConstant<int>, _bz_BitwiseOr<_bz_typename P_expr1::T_numtype, int> > >
2494operator|(_bz_MatExpr<P_expr1> d1, int d2)
2495{
2496 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2497 _bz_MatExprConstant<int>,
2498 _bz_BitwiseOr<_bz_typename P_expr1::T_numtype, int> > T_expr;
2499
2500 return _bz_MatExpr<T_expr>(T_expr(d1,
2501 _bz_MatExprConstant<int>(d2)));
2502}
2503
2504// int | Matrix<P_numtype2, P_struct2>
2505template<class P_numtype2, class P_struct2>
2506inline
2507_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2508 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_BitwiseOr<int, P_numtype2> > >
2509operator|(int d1, const Matrix<P_numtype2, P_struct2>& d2)
2510{
2511 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2512 _bz_MatrixRef<P_numtype2, P_struct2>,
2513 _bz_BitwiseOr<int, P_numtype2> > T_expr;
2514
2515 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2516 d2._bz_getRef()));
2517}
2518
2519// int | _bz_MatExpr<P_expr2>
2520template<class P_expr2>
2521inline
2522_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2523 _bz_MatExpr<P_expr2>, _bz_BitwiseOr<int, _bz_typename P_expr2::T_numtype> > >
2524operator|(int d1, _bz_MatExpr<P_expr2> d2)
2525{
2526 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2527 _bz_MatExpr<P_expr2>,
2528 _bz_BitwiseOr<int, _bz_typename P_expr2::T_numtype> > T_expr;
2529
2530 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2531 d2));
2532}
2533/****************************************************************************
2534 * Shift right Operators
2535 ****************************************************************************/
2536
2537// Matrix<P_numtype1, P_struct1> >> Matrix<P_numtype2, P_struct2>
2538template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
2539inline
2540_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2541 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_ShiftRight<P_numtype1, P_numtype2> > >
2542operator>>(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
2543{
2544 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2545 _bz_MatrixRef<P_numtype2, P_struct2>,
2546 _bz_ShiftRight<P_numtype1, P_numtype2> > T_expr;
2547
2548 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2549 d2._bz_getRef()));
2550}
2551
2552// Matrix<P_numtype1, P_struct1> >> _bz_MatExpr<P_expr2>
2553template<class P_numtype1, class P_struct1, class P_expr2>
2554inline
2555_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2556 _bz_MatExpr<P_expr2>, _bz_ShiftRight<P_numtype1, _bz_typename P_expr2::T_numtype> > >
2557operator>>(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
2558{
2559 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2560 _bz_MatExpr<P_expr2>,
2561 _bz_ShiftRight<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
2562
2563 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2564 d2));
2565}
2566
2567// Matrix<P_numtype1, P_struct1> >> int
2568template<class P_numtype1, class P_struct1>
2569inline
2570_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2571 _bz_MatExprConstant<int>, _bz_ShiftRight<P_numtype1, int> > >
2572operator>>(const Matrix<P_numtype1, P_struct1>& d1, int d2)
2573{
2574 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2575 _bz_MatExprConstant<int>,
2576 _bz_ShiftRight<P_numtype1, int> > T_expr;
2577
2578 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2579 _bz_MatExprConstant<int>(d2)));
2580}
2581
2582// _bz_MatExpr<P_expr1> >> Matrix<P_numtype2, P_struct2>
2583template<class P_expr1, class P_numtype2, class P_struct2>
2584inline
2585_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2586 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_ShiftRight<_bz_typename P_expr1::T_numtype, P_numtype2> > >
2587operator>>(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
2588{
2589 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2590 _bz_MatrixRef<P_numtype2, P_struct2>,
2591 _bz_ShiftRight<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
2592
2593 return _bz_MatExpr<T_expr>(T_expr(d1,
2594 d2._bz_getRef()));
2595}
2596
2597// _bz_MatExpr<P_expr1> >> _bz_MatExpr<P_expr2>
2598template<class P_expr1, class P_expr2>
2599inline
2600_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2601 _bz_MatExpr<P_expr2>, _bz_ShiftRight<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
2602operator>>(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
2603{
2604 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2605 _bz_MatExpr<P_expr2>,
2606 _bz_ShiftRight<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
2607
2608 return _bz_MatExpr<T_expr>(T_expr(d1,
2609 d2));
2610}
2611
2612// _bz_MatExpr<P_expr1> >> int
2613template<class P_expr1>
2614inline
2615_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2616 _bz_MatExprConstant<int>, _bz_ShiftRight<_bz_typename P_expr1::T_numtype, int> > >
2617operator>>(_bz_MatExpr<P_expr1> d1, int d2)
2618{
2619 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2620 _bz_MatExprConstant<int>,
2621 _bz_ShiftRight<_bz_typename P_expr1::T_numtype, int> > T_expr;
2622
2623 return _bz_MatExpr<T_expr>(T_expr(d1,
2624 _bz_MatExprConstant<int>(d2)));
2625}
2626
2627// int >> Matrix<P_numtype2, P_struct2>
2628template<class P_numtype2, class P_struct2>
2629inline
2630_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2631 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_ShiftRight<int, P_numtype2> > >
2632operator>>(int d1, const Matrix<P_numtype2, P_struct2>& d2)
2633{
2634 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2635 _bz_MatrixRef<P_numtype2, P_struct2>,
2636 _bz_ShiftRight<int, P_numtype2> > T_expr;
2637
2638 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2639 d2._bz_getRef()));
2640}
2641
2642// int >> _bz_MatExpr<P_expr2>
2643template<class P_expr2>
2644inline
2645_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2646 _bz_MatExpr<P_expr2>, _bz_ShiftRight<int, _bz_typename P_expr2::T_numtype> > >
2647operator>>(int d1, _bz_MatExpr<P_expr2> d2)
2648{
2649 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2650 _bz_MatExpr<P_expr2>,
2651 _bz_ShiftRight<int, _bz_typename P_expr2::T_numtype> > T_expr;
2652
2653 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2654 d2));
2655}
2656/****************************************************************************
2657 * Shift left Operators
2658 ****************************************************************************/
2659
2660// Matrix<P_numtype1, P_struct1> << Matrix<P_numtype2, P_struct2>
2661template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
2662inline
2663_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2664 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_ShiftLeft<P_numtype1, P_numtype2> > >
2665operator<<(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
2666{
2667 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2668 _bz_MatrixRef<P_numtype2, P_struct2>,
2669 _bz_ShiftLeft<P_numtype1, P_numtype2> > T_expr;
2670
2671 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2672 d2._bz_getRef()));
2673}
2674
2675// Matrix<P_numtype1, P_struct1> << _bz_MatExpr<P_expr2>
2676template<class P_numtype1, class P_struct1, class P_expr2>
2677inline
2678_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2679 _bz_MatExpr<P_expr2>, _bz_ShiftLeft<P_numtype1, _bz_typename P_expr2::T_numtype> > >
2680operator<<(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
2681{
2682 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2683 _bz_MatExpr<P_expr2>,
2684 _bz_ShiftLeft<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
2685
2686 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2687 d2));
2688}
2689
2690// Matrix<P_numtype1, P_struct1> << int
2691template<class P_numtype1, class P_struct1>
2692inline
2693_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2694 _bz_MatExprConstant<int>, _bz_ShiftLeft<P_numtype1, int> > >
2695operator<<(const Matrix<P_numtype1, P_struct1>& d1, int d2)
2696{
2697 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2698 _bz_MatExprConstant<int>,
2699 _bz_ShiftLeft<P_numtype1, int> > T_expr;
2700
2701 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2702 _bz_MatExprConstant<int>(d2)));
2703}
2704
2705// _bz_MatExpr<P_expr1> << Matrix<P_numtype2, P_struct2>
2706template<class P_expr1, class P_numtype2, class P_struct2>
2707inline
2708_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2709 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_ShiftLeft<_bz_typename P_expr1::T_numtype, P_numtype2> > >
2710operator<<(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
2711{
2712 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2713 _bz_MatrixRef<P_numtype2, P_struct2>,
2714 _bz_ShiftLeft<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
2715
2716 return _bz_MatExpr<T_expr>(T_expr(d1,
2717 d2._bz_getRef()));
2718}
2719
2720// _bz_MatExpr<P_expr1> << _bz_MatExpr<P_expr2>
2721template<class P_expr1, class P_expr2>
2722inline
2723_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2724 _bz_MatExpr<P_expr2>, _bz_ShiftLeft<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
2725operator<<(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
2726{
2727 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2728 _bz_MatExpr<P_expr2>,
2729 _bz_ShiftLeft<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
2730
2731 return _bz_MatExpr<T_expr>(T_expr(d1,
2732 d2));
2733}
2734
2735// _bz_MatExpr<P_expr1> << int
2736template<class P_expr1>
2737inline
2738_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2739 _bz_MatExprConstant<int>, _bz_ShiftLeft<_bz_typename P_expr1::T_numtype, int> > >
2740operator<<(_bz_MatExpr<P_expr1> d1, int d2)
2741{
2742 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2743 _bz_MatExprConstant<int>,
2744 _bz_ShiftLeft<_bz_typename P_expr1::T_numtype, int> > T_expr;
2745
2746 return _bz_MatExpr<T_expr>(T_expr(d1,
2747 _bz_MatExprConstant<int>(d2)));
2748}
2749
2750// int << Matrix<P_numtype2, P_struct2>
2751template<class P_numtype2, class P_struct2>
2752inline
2753_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2754 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_ShiftLeft<int, P_numtype2> > >
2755operator<<(int d1, const Matrix<P_numtype2, P_struct2>& d2)
2756{
2757 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2758 _bz_MatrixRef<P_numtype2, P_struct2>,
2759 _bz_ShiftLeft<int, P_numtype2> > T_expr;
2760
2761 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2762 d2._bz_getRef()));
2763}
2764
2765// int << _bz_MatExpr<P_expr2>
2766template<class P_expr2>
2767inline
2768_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
2769 _bz_MatExpr<P_expr2>, _bz_ShiftLeft<int, _bz_typename P_expr2::T_numtype> > >
2770operator<<(int d1, _bz_MatExpr<P_expr2> d2)
2771{
2772 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
2773 _bz_MatExpr<P_expr2>,
2774 _bz_ShiftLeft<int, _bz_typename P_expr2::T_numtype> > T_expr;
2775
2776 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
2777 d2));
2778}
2779/****************************************************************************
2780 * Greater-than Operators
2781 ****************************************************************************/
2782
2783// Matrix<P_numtype1, P_struct1> > Matrix<P_numtype2, P_struct2>
2784template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
2785inline
2786_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2787 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Greater<P_numtype1, P_numtype2> > >
2788operator>(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
2789{
2790 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2791 _bz_MatrixRef<P_numtype2, P_struct2>,
2792 _bz_Greater<P_numtype1, P_numtype2> > T_expr;
2793
2794 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2795 d2._bz_getRef()));
2796}
2797
2798// Matrix<P_numtype1, P_struct1> > _bz_MatExpr<P_expr2>
2799template<class P_numtype1, class P_struct1, class P_expr2>
2800inline
2801_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2802 _bz_MatExpr<P_expr2>, _bz_Greater<P_numtype1, _bz_typename P_expr2::T_numtype> > >
2803operator>(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
2804{
2805 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2806 _bz_MatExpr<P_expr2>,
2807 _bz_Greater<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
2808
2809 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2810 d2));
2811}
2812
2813// Matrix<P_numtype1, P_struct1> > int
2814template<class P_numtype1, class P_struct1>
2815inline
2816_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2817 _bz_MatExprConstant<int>, _bz_Greater<P_numtype1, int> > >
2818operator>(const Matrix<P_numtype1, P_struct1>& d1, int d2)
2819{
2820 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2821 _bz_MatExprConstant<int>,
2822 _bz_Greater<P_numtype1, int> > T_expr;
2823
2824 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2825 _bz_MatExprConstant<int>(d2)));
2826}
2827
2828// Matrix<P_numtype1, P_struct1> > float
2829template<class P_numtype1, class P_struct1>
2830inline
2831_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2832 _bz_MatExprConstant<float>, _bz_Greater<P_numtype1, float> > >
2833operator>(const Matrix<P_numtype1, P_struct1>& d1, float d2)
2834{
2835 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2836 _bz_MatExprConstant<float>,
2837 _bz_Greater<P_numtype1, float> > T_expr;
2838
2839 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2840 _bz_MatExprConstant<float>(d2)));
2841}
2842
2843// Matrix<P_numtype1, P_struct1> > double
2844template<class P_numtype1, class P_struct1>
2845inline
2846_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2847 _bz_MatExprConstant<double>, _bz_Greater<P_numtype1, double> > >
2848operator>(const Matrix<P_numtype1, P_struct1>& d1, double d2)
2849{
2850 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2851 _bz_MatExprConstant<double>,
2852 _bz_Greater<P_numtype1, double> > T_expr;
2853
2854 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2855 _bz_MatExprConstant<double>(d2)));
2856}
2857
2858// Matrix<P_numtype1, P_struct1> > long double
2859template<class P_numtype1, class P_struct1>
2860inline
2861_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2862 _bz_MatExprConstant<long double>, _bz_Greater<P_numtype1, long double> > >
2863operator>(const Matrix<P_numtype1, P_struct1>& d1, long double d2)
2864{
2865 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2866 _bz_MatExprConstant<long double>,
2867 _bz_Greater<P_numtype1, long double> > T_expr;
2868
2869 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2870 _bz_MatExprConstant<long double>(d2)));
2871}
2872
2873#ifdef BZ_HAVE_COMPLEX
2874// Matrix<P_numtype1, P_struct1> > complex<float>
2875template<class P_numtype1, class P_struct1>
2876inline
2877_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2878 _bz_MatExprConstant<complex<float> >, _bz_Greater<P_numtype1, complex<float> > > >
2879operator>(const Matrix<P_numtype1, P_struct1>& d1, complex<float> d2)
2880{
2881 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2882 _bz_MatExprConstant<complex<float> >,
2883 _bz_Greater<P_numtype1, complex<float> > > T_expr;
2884
2885 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2886 _bz_MatExprConstant<complex<float> >(d2)));
2887}
2888#endif // BZ_HAVE_COMPLEX
2889
2890#ifdef BZ_HAVE_COMPLEX
2891// Matrix<P_numtype1, P_struct1> > complex<double>
2892template<class P_numtype1, class P_struct1>
2893inline
2894_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2895 _bz_MatExprConstant<complex<double> >, _bz_Greater<P_numtype1, complex<double> > > >
2896operator>(const Matrix<P_numtype1, P_struct1>& d1, complex<double> d2)
2897{
2898 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2899 _bz_MatExprConstant<complex<double> >,
2900 _bz_Greater<P_numtype1, complex<double> > > T_expr;
2901
2902 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2903 _bz_MatExprConstant<complex<double> >(d2)));
2904}
2905#endif // BZ_HAVE_COMPLEX
2906
2907#ifdef BZ_HAVE_COMPLEX
2908// Matrix<P_numtype1, P_struct1> > complex<long double>
2909template<class P_numtype1, class P_struct1>
2910inline
2911_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2912 _bz_MatExprConstant<complex<long double> >, _bz_Greater<P_numtype1, complex<long double> > > >
2913operator>(const Matrix<P_numtype1, P_struct1>& d1, complex<long double> d2)
2914{
2915 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
2916 _bz_MatExprConstant<complex<long double> >,
2917 _bz_Greater<P_numtype1, complex<long double> > > T_expr;
2918
2919 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
2920 _bz_MatExprConstant<complex<long double> >(d2)));
2921}
2922#endif // BZ_HAVE_COMPLEX
2923
2924// _bz_MatExpr<P_expr1> > Matrix<P_numtype2, P_struct2>
2925template<class P_expr1, class P_numtype2, class P_struct2>
2926inline
2927_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2928 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Greater<_bz_typename P_expr1::T_numtype, P_numtype2> > >
2929operator>(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
2930{
2931 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2932 _bz_MatrixRef<P_numtype2, P_struct2>,
2933 _bz_Greater<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
2934
2935 return _bz_MatExpr<T_expr>(T_expr(d1,
2936 d2._bz_getRef()));
2937}
2938
2939// _bz_MatExpr<P_expr1> > _bz_MatExpr<P_expr2>
2940template<class P_expr1, class P_expr2>
2941inline
2942_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2943 _bz_MatExpr<P_expr2>, _bz_Greater<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
2944operator>(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
2945{
2946 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2947 _bz_MatExpr<P_expr2>,
2948 _bz_Greater<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
2949
2950 return _bz_MatExpr<T_expr>(T_expr(d1,
2951 d2));
2952}
2953
2954// _bz_MatExpr<P_expr1> > int
2955template<class P_expr1>
2956inline
2957_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2958 _bz_MatExprConstant<int>, _bz_Greater<_bz_typename P_expr1::T_numtype, int> > >
2959operator>(_bz_MatExpr<P_expr1> d1, int d2)
2960{
2961 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2962 _bz_MatExprConstant<int>,
2963 _bz_Greater<_bz_typename P_expr1::T_numtype, int> > T_expr;
2964
2965 return _bz_MatExpr<T_expr>(T_expr(d1,
2966 _bz_MatExprConstant<int>(d2)));
2967}
2968
2969// _bz_MatExpr<P_expr1> > float
2970template<class P_expr1>
2971inline
2972_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2973 _bz_MatExprConstant<float>, _bz_Greater<_bz_typename P_expr1::T_numtype, float> > >
2974operator>(_bz_MatExpr<P_expr1> d1, float d2)
2975{
2976 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2977 _bz_MatExprConstant<float>,
2978 _bz_Greater<_bz_typename P_expr1::T_numtype, float> > T_expr;
2979
2980 return _bz_MatExpr<T_expr>(T_expr(d1,
2981 _bz_MatExprConstant<float>(d2)));
2982}
2983
2984// _bz_MatExpr<P_expr1> > double
2985template<class P_expr1>
2986inline
2987_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
2988 _bz_MatExprConstant<double>, _bz_Greater<_bz_typename P_expr1::T_numtype, double> > >
2989operator>(_bz_MatExpr<P_expr1> d1, double d2)
2990{
2991 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
2992 _bz_MatExprConstant<double>,
2993 _bz_Greater<_bz_typename P_expr1::T_numtype, double> > T_expr;
2994
2995 return _bz_MatExpr<T_expr>(T_expr(d1,
2996 _bz_MatExprConstant<double>(d2)));
2997}
2998
2999// _bz_MatExpr<P_expr1> > long double
3000template<class P_expr1>
3001inline
3002_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3003 _bz_MatExprConstant<long double>, _bz_Greater<_bz_typename P_expr1::T_numtype, long double> > >
3004operator>(_bz_MatExpr<P_expr1> d1, long double d2)
3005{
3006 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3007 _bz_MatExprConstant<long double>,
3008 _bz_Greater<_bz_typename P_expr1::T_numtype, long double> > T_expr;
3009
3010 return _bz_MatExpr<T_expr>(T_expr(d1,
3011 _bz_MatExprConstant<long double>(d2)));
3012}
3013
3014#ifdef BZ_HAVE_COMPLEX
3015// _bz_MatExpr<P_expr1> > complex<float>
3016template<class P_expr1>
3017inline
3018_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3019 _bz_MatExprConstant<complex<float> >, _bz_Greater<_bz_typename P_expr1::T_numtype, complex<float> > > >
3020operator>(_bz_MatExpr<P_expr1> d1, complex<float> d2)
3021{
3022 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3023 _bz_MatExprConstant<complex<float> >,
3024 _bz_Greater<_bz_typename P_expr1::T_numtype, complex<float> > > T_expr;
3025
3026 return _bz_MatExpr<T_expr>(T_expr(d1,
3027 _bz_MatExprConstant<complex<float> >(d2)));
3028}
3029#endif // BZ_HAVE_COMPLEX
3030
3031#ifdef BZ_HAVE_COMPLEX
3032// _bz_MatExpr<P_expr1> > complex<double>
3033template<class P_expr1>
3034inline
3035_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3036 _bz_MatExprConstant<complex<double> >, _bz_Greater<_bz_typename P_expr1::T_numtype, complex<double> > > >
3037operator>(_bz_MatExpr<P_expr1> d1, complex<double> d2)
3038{
3039 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3040 _bz_MatExprConstant<complex<double> >,
3041 _bz_Greater<_bz_typename P_expr1::T_numtype, complex<double> > > T_expr;
3042
3043 return _bz_MatExpr<T_expr>(T_expr(d1,
3044 _bz_MatExprConstant<complex<double> >(d2)));
3045}
3046#endif // BZ_HAVE_COMPLEX
3047
3048#ifdef BZ_HAVE_COMPLEX
3049// _bz_MatExpr<P_expr1> > complex<long double>
3050template<class P_expr1>
3051inline
3052_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3053 _bz_MatExprConstant<complex<long double> >, _bz_Greater<_bz_typename P_expr1::T_numtype, complex<long double> > > >
3054operator>(_bz_MatExpr<P_expr1> d1, complex<long double> d2)
3055{
3056 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3057 _bz_MatExprConstant<complex<long double> >,
3058 _bz_Greater<_bz_typename P_expr1::T_numtype, complex<long double> > > T_expr;
3059
3060 return _bz_MatExpr<T_expr>(T_expr(d1,
3061 _bz_MatExprConstant<complex<long double> >(d2)));
3062}
3063#endif // BZ_HAVE_COMPLEX
3064
3065// int > Matrix<P_numtype2, P_struct2>
3066template<class P_numtype2, class P_struct2>
3067inline
3068_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
3069 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Greater<int, P_numtype2> > >
3070operator>(int d1, const Matrix<P_numtype2, P_struct2>& d2)
3071{
3072 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
3073 _bz_MatrixRef<P_numtype2, P_struct2>,
3074 _bz_Greater<int, P_numtype2> > T_expr;
3075
3076 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
3077 d2._bz_getRef()));
3078}
3079
3080// int > _bz_MatExpr<P_expr2>
3081template<class P_expr2>
3082inline
3083_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
3084 _bz_MatExpr<P_expr2>, _bz_Greater<int, _bz_typename P_expr2::T_numtype> > >
3085operator>(int d1, _bz_MatExpr<P_expr2> d2)
3086{
3087 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
3088 _bz_MatExpr<P_expr2>,
3089 _bz_Greater<int, _bz_typename P_expr2::T_numtype> > T_expr;
3090
3091 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
3092 d2));
3093}
3094
3095// float > Matrix<P_numtype2, P_struct2>
3096template<class P_numtype2, class P_struct2>
3097inline
3098_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
3099 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Greater<float, P_numtype2> > >
3100operator>(float d1, const Matrix<P_numtype2, P_struct2>& d2)
3101{
3102 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
3103 _bz_MatrixRef<P_numtype2, P_struct2>,
3104 _bz_Greater<float, P_numtype2> > T_expr;
3105
3106 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
3107 d2._bz_getRef()));
3108}
3109
3110// float > _bz_MatExpr<P_expr2>
3111template<class P_expr2>
3112inline
3113_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
3114 _bz_MatExpr<P_expr2>, _bz_Greater<float, _bz_typename P_expr2::T_numtype> > >
3115operator>(float d1, _bz_MatExpr<P_expr2> d2)
3116{
3117 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
3118 _bz_MatExpr<P_expr2>,
3119 _bz_Greater<float, _bz_typename P_expr2::T_numtype> > T_expr;
3120
3121 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
3122 d2));
3123}
3124
3125// double > Matrix<P_numtype2, P_struct2>
3126template<class P_numtype2, class P_struct2>
3127inline
3128_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
3129 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Greater<double, P_numtype2> > >
3130operator>(double d1, const Matrix<P_numtype2, P_struct2>& d2)
3131{
3132 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
3133 _bz_MatrixRef<P_numtype2, P_struct2>,
3134 _bz_Greater<double, P_numtype2> > T_expr;
3135
3136 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
3137 d2._bz_getRef()));
3138}
3139
3140// double > _bz_MatExpr<P_expr2>
3141template<class P_expr2>
3142inline
3143_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
3144 _bz_MatExpr<P_expr2>, _bz_Greater<double, _bz_typename P_expr2::T_numtype> > >
3145operator>(double d1, _bz_MatExpr<P_expr2> d2)
3146{
3147 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
3148 _bz_MatExpr<P_expr2>,
3149 _bz_Greater<double, _bz_typename P_expr2::T_numtype> > T_expr;
3150
3151 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
3152 d2));
3153}
3154
3155// long double > Matrix<P_numtype2, P_struct2>
3156template<class P_numtype2, class P_struct2>
3157inline
3158_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
3159 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Greater<long double, P_numtype2> > >
3160operator>(long double d1, const Matrix<P_numtype2, P_struct2>& d2)
3161{
3162 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
3163 _bz_MatrixRef<P_numtype2, P_struct2>,
3164 _bz_Greater<long double, P_numtype2> > T_expr;
3165
3166 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
3167 d2._bz_getRef()));
3168}
3169
3170// long double > _bz_MatExpr<P_expr2>
3171template<class P_expr2>
3172inline
3173_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
3174 _bz_MatExpr<P_expr2>, _bz_Greater<long double, _bz_typename P_expr2::T_numtype> > >
3175operator>(long double d1, _bz_MatExpr<P_expr2> d2)
3176{
3177 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
3178 _bz_MatExpr<P_expr2>,
3179 _bz_Greater<long double, _bz_typename P_expr2::T_numtype> > T_expr;
3180
3181 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
3182 d2));
3183}
3184
3185#ifdef BZ_HAVE_COMPLEX
3186// complex<float> > Matrix<P_numtype2, P_struct2>
3187template<class P_numtype2, class P_struct2>
3188inline
3189_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
3190 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Greater<complex<float> , P_numtype2> > >
3191operator>(complex<float> d1, const Matrix<P_numtype2, P_struct2>& d2)
3192{
3193 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
3194 _bz_MatrixRef<P_numtype2, P_struct2>,
3195 _bz_Greater<complex<float> , P_numtype2> > T_expr;
3196
3197 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
3198 d2._bz_getRef()));
3199}
3200#endif // BZ_HAVE_COMPLEX
3201
3202#ifdef BZ_HAVE_COMPLEX
3203// complex<float> > _bz_MatExpr<P_expr2>
3204template<class P_expr2>
3205inline
3206_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
3207 _bz_MatExpr<P_expr2>, _bz_Greater<complex<float> , _bz_typename P_expr2::T_numtype> > >
3208operator>(complex<float> d1, _bz_MatExpr<P_expr2> d2)
3209{
3210 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
3211 _bz_MatExpr<P_expr2>,
3212 _bz_Greater<complex<float> , _bz_typename P_expr2::T_numtype> > T_expr;
3213
3214 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
3215 d2));
3216}
3217#endif // BZ_HAVE_COMPLEX
3218
3219#ifdef BZ_HAVE_COMPLEX
3220// complex<double> > Matrix<P_numtype2, P_struct2>
3221template<class P_numtype2, class P_struct2>
3222inline
3223_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
3224 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Greater<complex<double> , P_numtype2> > >
3225operator>(complex<double> d1, const Matrix<P_numtype2, P_struct2>& d2)
3226{
3227 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
3228 _bz_MatrixRef<P_numtype2, P_struct2>,
3229 _bz_Greater<complex<double> , P_numtype2> > T_expr;
3230
3231 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
3232 d2._bz_getRef()));
3233}
3234#endif // BZ_HAVE_COMPLEX
3235
3236#ifdef BZ_HAVE_COMPLEX
3237// complex<double> > _bz_MatExpr<P_expr2>
3238template<class P_expr2>
3239inline
3240_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
3241 _bz_MatExpr<P_expr2>, _bz_Greater<complex<double> , _bz_typename P_expr2::T_numtype> > >
3242operator>(complex<double> d1, _bz_MatExpr<P_expr2> d2)
3243{
3244 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
3245 _bz_MatExpr<P_expr2>,
3246 _bz_Greater<complex<double> , _bz_typename P_expr2::T_numtype> > T_expr;
3247
3248 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
3249 d2));
3250}
3251#endif // BZ_HAVE_COMPLEX
3252
3253#ifdef BZ_HAVE_COMPLEX
3254// complex<long double> > Matrix<P_numtype2, P_struct2>
3255template<class P_numtype2, class P_struct2>
3256inline
3257_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
3258 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Greater<complex<long double> , P_numtype2> > >
3259operator>(complex<long double> d1, const Matrix<P_numtype2, P_struct2>& d2)
3260{
3261 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
3262 _bz_MatrixRef<P_numtype2, P_struct2>,
3263 _bz_Greater<complex<long double> , P_numtype2> > T_expr;
3264
3265 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
3266 d2._bz_getRef()));
3267}
3268#endif // BZ_HAVE_COMPLEX
3269
3270#ifdef BZ_HAVE_COMPLEX
3271// complex<long double> > _bz_MatExpr<P_expr2>
3272template<class P_expr2>
3273inline
3274_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
3275 _bz_MatExpr<P_expr2>, _bz_Greater<complex<long double> , _bz_typename P_expr2::T_numtype> > >
3276operator>(complex<long double> d1, _bz_MatExpr<P_expr2> d2)
3277{
3278 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
3279 _bz_MatExpr<P_expr2>,
3280 _bz_Greater<complex<long double> , _bz_typename P_expr2::T_numtype> > T_expr;
3281
3282 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
3283 d2));
3284}
3285#endif // BZ_HAVE_COMPLEX
3286/****************************************************************************
3287 * Less-than Operators
3288 ****************************************************************************/
3289
3290// Matrix<P_numtype1, P_struct1> < Matrix<P_numtype2, P_struct2>
3291template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
3292inline
3293_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3294 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Less<P_numtype1, P_numtype2> > >
3295operator<(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
3296{
3297 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3298 _bz_MatrixRef<P_numtype2, P_struct2>,
3299 _bz_Less<P_numtype1, P_numtype2> > T_expr;
3300
3301 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3302 d2._bz_getRef()));
3303}
3304
3305// Matrix<P_numtype1, P_struct1> < _bz_MatExpr<P_expr2>
3306template<class P_numtype1, class P_struct1, class P_expr2>
3307inline
3308_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3309 _bz_MatExpr<P_expr2>, _bz_Less<P_numtype1, _bz_typename P_expr2::T_numtype> > >
3310operator<(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
3311{
3312 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3313 _bz_MatExpr<P_expr2>,
3314 _bz_Less<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
3315
3316 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3317 d2));
3318}
3319
3320// Matrix<P_numtype1, P_struct1> < int
3321template<class P_numtype1, class P_struct1>
3322inline
3323_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3324 _bz_MatExprConstant<int>, _bz_Less<P_numtype1, int> > >
3325operator<(const Matrix<P_numtype1, P_struct1>& d1, int d2)
3326{
3327 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3328 _bz_MatExprConstant<int>,
3329 _bz_Less<P_numtype1, int> > T_expr;
3330
3331 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3332 _bz_MatExprConstant<int>(d2)));
3333}
3334
3335// Matrix<P_numtype1, P_struct1> < float
3336template<class P_numtype1, class P_struct1>
3337inline
3338_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3339 _bz_MatExprConstant<float>, _bz_Less<P_numtype1, float> > >
3340operator<(const Matrix<P_numtype1, P_struct1>& d1, float d2)
3341{
3342 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3343 _bz_MatExprConstant<float>,
3344 _bz_Less<P_numtype1, float> > T_expr;
3345
3346 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3347 _bz_MatExprConstant<float>(d2)));
3348}
3349
3350// Matrix<P_numtype1, P_struct1> < double
3351template<class P_numtype1, class P_struct1>
3352inline
3353_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3354 _bz_MatExprConstant<double>, _bz_Less<P_numtype1, double> > >
3355operator<(const Matrix<P_numtype1, P_struct1>& d1, double d2)
3356{
3357 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3358 _bz_MatExprConstant<double>,
3359 _bz_Less<P_numtype1, double> > T_expr;
3360
3361 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3362 _bz_MatExprConstant<double>(d2)));
3363}
3364
3365// Matrix<P_numtype1, P_struct1> < long double
3366template<class P_numtype1, class P_struct1>
3367inline
3368_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3369 _bz_MatExprConstant<long double>, _bz_Less<P_numtype1, long double> > >
3370operator<(const Matrix<P_numtype1, P_struct1>& d1, long double d2)
3371{
3372 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3373 _bz_MatExprConstant<long double>,
3374 _bz_Less<P_numtype1, long double> > T_expr;
3375
3376 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3377 _bz_MatExprConstant<long double>(d2)));
3378}
3379
3380#ifdef BZ_HAVE_COMPLEX
3381// Matrix<P_numtype1, P_struct1> < complex<float>
3382template<class P_numtype1, class P_struct1>
3383inline
3384_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3385 _bz_MatExprConstant<complex<float> >, _bz_Less<P_numtype1, complex<float> > > >
3386operator<(const Matrix<P_numtype1, P_struct1>& d1, complex<float> d2)
3387{
3388 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3389 _bz_MatExprConstant<complex<float> >,
3390 _bz_Less<P_numtype1, complex<float> > > T_expr;
3391
3392 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3393 _bz_MatExprConstant<complex<float> >(d2)));
3394}
3395#endif // BZ_HAVE_COMPLEX
3396
3397#ifdef BZ_HAVE_COMPLEX
3398// Matrix<P_numtype1, P_struct1> < complex<double>
3399template<class P_numtype1, class P_struct1>
3400inline
3401_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3402 _bz_MatExprConstant<complex<double> >, _bz_Less<P_numtype1, complex<double> > > >
3403operator<(const Matrix<P_numtype1, P_struct1>& d1, complex<double> d2)
3404{
3405 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3406 _bz_MatExprConstant<complex<double> >,
3407 _bz_Less<P_numtype1, complex<double> > > T_expr;
3408
3409 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3410 _bz_MatExprConstant<complex<double> >(d2)));
3411}
3412#endif // BZ_HAVE_COMPLEX
3413
3414#ifdef BZ_HAVE_COMPLEX
3415// Matrix<P_numtype1, P_struct1> < complex<long double>
3416template<class P_numtype1, class P_struct1>
3417inline
3418_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3419 _bz_MatExprConstant<complex<long double> >, _bz_Less<P_numtype1, complex<long double> > > >
3420operator<(const Matrix<P_numtype1, P_struct1>& d1, complex<long double> d2)
3421{
3422 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3423 _bz_MatExprConstant<complex<long double> >,
3424 _bz_Less<P_numtype1, complex<long double> > > T_expr;
3425
3426 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3427 _bz_MatExprConstant<complex<long double> >(d2)));
3428}
3429#endif // BZ_HAVE_COMPLEX
3430
3431// _bz_MatExpr<P_expr1> < Matrix<P_numtype2, P_struct2>
3432template<class P_expr1, class P_numtype2, class P_struct2>
3433inline
3434_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3435 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Less<_bz_typename P_expr1::T_numtype, P_numtype2> > >
3436operator<(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
3437{
3438 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3439 _bz_MatrixRef<P_numtype2, P_struct2>,
3440 _bz_Less<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
3441
3442 return _bz_MatExpr<T_expr>(T_expr(d1,
3443 d2._bz_getRef()));
3444}
3445
3446// _bz_MatExpr<P_expr1> < _bz_MatExpr<P_expr2>
3447template<class P_expr1, class P_expr2>
3448inline
3449_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3450 _bz_MatExpr<P_expr2>, _bz_Less<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
3451operator<(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
3452{
3453 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3454 _bz_MatExpr<P_expr2>,
3455 _bz_Less<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
3456
3457 return _bz_MatExpr<T_expr>(T_expr(d1,
3458 d2));
3459}
3460
3461// _bz_MatExpr<P_expr1> < int
3462template<class P_expr1>
3463inline
3464_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3465 _bz_MatExprConstant<int>, _bz_Less<_bz_typename P_expr1::T_numtype, int> > >
3466operator<(_bz_MatExpr<P_expr1> d1, int d2)
3467{
3468 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3469 _bz_MatExprConstant<int>,
3470 _bz_Less<_bz_typename P_expr1::T_numtype, int> > T_expr;
3471
3472 return _bz_MatExpr<T_expr>(T_expr(d1,
3473 _bz_MatExprConstant<int>(d2)));
3474}
3475
3476// _bz_MatExpr<P_expr1> < float
3477template<class P_expr1>
3478inline
3479_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3480 _bz_MatExprConstant<float>, _bz_Less<_bz_typename P_expr1::T_numtype, float> > >
3481operator<(_bz_MatExpr<P_expr1> d1, float d2)
3482{
3483 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3484 _bz_MatExprConstant<float>,
3485 _bz_Less<_bz_typename P_expr1::T_numtype, float> > T_expr;
3486
3487 return _bz_MatExpr<T_expr>(T_expr(d1,
3488 _bz_MatExprConstant<float>(d2)));
3489}
3490
3491// _bz_MatExpr<P_expr1> < double
3492template<class P_expr1>
3493inline
3494_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3495 _bz_MatExprConstant<double>, _bz_Less<_bz_typename P_expr1::T_numtype, double> > >
3496operator<(_bz_MatExpr<P_expr1> d1, double d2)
3497{
3498 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3499 _bz_MatExprConstant<double>,
3500 _bz_Less<_bz_typename P_expr1::T_numtype, double> > T_expr;
3501
3502 return _bz_MatExpr<T_expr>(T_expr(d1,
3503 _bz_MatExprConstant<double>(d2)));
3504}
3505
3506// _bz_MatExpr<P_expr1> < long double
3507template<class P_expr1>
3508inline
3509_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3510 _bz_MatExprConstant<long double>, _bz_Less<_bz_typename P_expr1::T_numtype, long double> > >
3511operator<(_bz_MatExpr<P_expr1> d1, long double d2)
3512{
3513 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3514 _bz_MatExprConstant<long double>,
3515 _bz_Less<_bz_typename P_expr1::T_numtype, long double> > T_expr;
3516
3517 return _bz_MatExpr<T_expr>(T_expr(d1,
3518 _bz_MatExprConstant<long double>(d2)));
3519}
3520
3521#ifdef BZ_HAVE_COMPLEX
3522// _bz_MatExpr<P_expr1> < complex<float>
3523template<class P_expr1>
3524inline
3525_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3526 _bz_MatExprConstant<complex<float> >, _bz_Less<_bz_typename P_expr1::T_numtype, complex<float> > > >
3527operator<(_bz_MatExpr<P_expr1> d1, complex<float> d2)
3528{
3529 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3530 _bz_MatExprConstant<complex<float> >,
3531 _bz_Less<_bz_typename P_expr1::T_numtype, complex<float> > > T_expr;
3532
3533 return _bz_MatExpr<T_expr>(T_expr(d1,
3534 _bz_MatExprConstant<complex<float> >(d2)));
3535}
3536#endif // BZ_HAVE_COMPLEX
3537
3538#ifdef BZ_HAVE_COMPLEX
3539// _bz_MatExpr<P_expr1> < complex<double>
3540template<class P_expr1>
3541inline
3542_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3543 _bz_MatExprConstant<complex<double> >, _bz_Less<_bz_typename P_expr1::T_numtype, complex<double> > > >
3544operator<(_bz_MatExpr<P_expr1> d1, complex<double> d2)
3545{
3546 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3547 _bz_MatExprConstant<complex<double> >,
3548 _bz_Less<_bz_typename P_expr1::T_numtype, complex<double> > > T_expr;
3549
3550 return _bz_MatExpr<T_expr>(T_expr(d1,
3551 _bz_MatExprConstant<complex<double> >(d2)));
3552}
3553#endif // BZ_HAVE_COMPLEX
3554
3555#ifdef BZ_HAVE_COMPLEX
3556// _bz_MatExpr<P_expr1> < complex<long double>
3557template<class P_expr1>
3558inline
3559_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3560 _bz_MatExprConstant<complex<long double> >, _bz_Less<_bz_typename P_expr1::T_numtype, complex<long double> > > >
3561operator<(_bz_MatExpr<P_expr1> d1, complex<long double> d2)
3562{
3563 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3564 _bz_MatExprConstant<complex<long double> >,
3565 _bz_Less<_bz_typename P_expr1::T_numtype, complex<long double> > > T_expr;
3566
3567 return _bz_MatExpr<T_expr>(T_expr(d1,
3568 _bz_MatExprConstant<complex<long double> >(d2)));
3569}
3570#endif // BZ_HAVE_COMPLEX
3571
3572// int < Matrix<P_numtype2, P_struct2>
3573template<class P_numtype2, class P_struct2>
3574inline
3575_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
3576 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Less<int, P_numtype2> > >
3577operator<(int d1, const Matrix<P_numtype2, P_struct2>& d2)
3578{
3579 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
3580 _bz_MatrixRef<P_numtype2, P_struct2>,
3581 _bz_Less<int, P_numtype2> > T_expr;
3582
3583 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
3584 d2._bz_getRef()));
3585}
3586
3587// int < _bz_MatExpr<P_expr2>
3588template<class P_expr2>
3589inline
3590_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
3591 _bz_MatExpr<P_expr2>, _bz_Less<int, _bz_typename P_expr2::T_numtype> > >
3592operator<(int d1, _bz_MatExpr<P_expr2> d2)
3593{
3594 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
3595 _bz_MatExpr<P_expr2>,
3596 _bz_Less<int, _bz_typename P_expr2::T_numtype> > T_expr;
3597
3598 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
3599 d2));
3600}
3601
3602// float < Matrix<P_numtype2, P_struct2>
3603template<class P_numtype2, class P_struct2>
3604inline
3605_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
3606 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Less<float, P_numtype2> > >
3607operator<(float d1, const Matrix<P_numtype2, P_struct2>& d2)
3608{
3609 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
3610 _bz_MatrixRef<P_numtype2, P_struct2>,
3611 _bz_Less<float, P_numtype2> > T_expr;
3612
3613 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
3614 d2._bz_getRef()));
3615}
3616
3617// float < _bz_MatExpr<P_expr2>
3618template<class P_expr2>
3619inline
3620_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
3621 _bz_MatExpr<P_expr2>, _bz_Less<float, _bz_typename P_expr2::T_numtype> > >
3622operator<(float d1, _bz_MatExpr<P_expr2> d2)
3623{
3624 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
3625 _bz_MatExpr<P_expr2>,
3626 _bz_Less<float, _bz_typename P_expr2::T_numtype> > T_expr;
3627
3628 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
3629 d2));
3630}
3631
3632// double < Matrix<P_numtype2, P_struct2>
3633template<class P_numtype2, class P_struct2>
3634inline
3635_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
3636 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Less<double, P_numtype2> > >
3637operator<(double d1, const Matrix<P_numtype2, P_struct2>& d2)
3638{
3639 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
3640 _bz_MatrixRef<P_numtype2, P_struct2>,
3641 _bz_Less<double, P_numtype2> > T_expr;
3642
3643 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
3644 d2._bz_getRef()));
3645}
3646
3647// double < _bz_MatExpr<P_expr2>
3648template<class P_expr2>
3649inline
3650_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
3651 _bz_MatExpr<P_expr2>, _bz_Less<double, _bz_typename P_expr2::T_numtype> > >
3652operator<(double d1, _bz_MatExpr<P_expr2> d2)
3653{
3654 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
3655 _bz_MatExpr<P_expr2>,
3656 _bz_Less<double, _bz_typename P_expr2::T_numtype> > T_expr;
3657
3658 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
3659 d2));
3660}
3661
3662// long double < Matrix<P_numtype2, P_struct2>
3663template<class P_numtype2, class P_struct2>
3664inline
3665_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
3666 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Less<long double, P_numtype2> > >
3667operator<(long double d1, const Matrix<P_numtype2, P_struct2>& d2)
3668{
3669 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
3670 _bz_MatrixRef<P_numtype2, P_struct2>,
3671 _bz_Less<long double, P_numtype2> > T_expr;
3672
3673 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
3674 d2._bz_getRef()));
3675}
3676
3677// long double < _bz_MatExpr<P_expr2>
3678template<class P_expr2>
3679inline
3680_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
3681 _bz_MatExpr<P_expr2>, _bz_Less<long double, _bz_typename P_expr2::T_numtype> > >
3682operator<(long double d1, _bz_MatExpr<P_expr2> d2)
3683{
3684 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
3685 _bz_MatExpr<P_expr2>,
3686 _bz_Less<long double, _bz_typename P_expr2::T_numtype> > T_expr;
3687
3688 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
3689 d2));
3690}
3691
3692#ifdef BZ_HAVE_COMPLEX
3693// complex<float> < Matrix<P_numtype2, P_struct2>
3694template<class P_numtype2, class P_struct2>
3695inline
3696_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
3697 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Less<complex<float> , P_numtype2> > >
3698operator<(complex<float> d1, const Matrix<P_numtype2, P_struct2>& d2)
3699{
3700 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
3701 _bz_MatrixRef<P_numtype2, P_struct2>,
3702 _bz_Less<complex<float> , P_numtype2> > T_expr;
3703
3704 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
3705 d2._bz_getRef()));
3706}
3707#endif // BZ_HAVE_COMPLEX
3708
3709#ifdef BZ_HAVE_COMPLEX
3710// complex<float> < _bz_MatExpr<P_expr2>
3711template<class P_expr2>
3712inline
3713_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
3714 _bz_MatExpr<P_expr2>, _bz_Less<complex<float> , _bz_typename P_expr2::T_numtype> > >
3715operator<(complex<float> d1, _bz_MatExpr<P_expr2> d2)
3716{
3717 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
3718 _bz_MatExpr<P_expr2>,
3719 _bz_Less<complex<float> , _bz_typename P_expr2::T_numtype> > T_expr;
3720
3721 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
3722 d2));
3723}
3724#endif // BZ_HAVE_COMPLEX
3725
3726#ifdef BZ_HAVE_COMPLEX
3727// complex<double> < Matrix<P_numtype2, P_struct2>
3728template<class P_numtype2, class P_struct2>
3729inline
3730_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
3731 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Less<complex<double> , P_numtype2> > >
3732operator<(complex<double> d1, const Matrix<P_numtype2, P_struct2>& d2)
3733{
3734 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
3735 _bz_MatrixRef<P_numtype2, P_struct2>,
3736 _bz_Less<complex<double> , P_numtype2> > T_expr;
3737
3738 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
3739 d2._bz_getRef()));
3740}
3741#endif // BZ_HAVE_COMPLEX
3742
3743#ifdef BZ_HAVE_COMPLEX
3744// complex<double> < _bz_MatExpr<P_expr2>
3745template<class P_expr2>
3746inline
3747_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
3748 _bz_MatExpr<P_expr2>, _bz_Less<complex<double> , _bz_typename P_expr2::T_numtype> > >
3749operator<(complex<double> d1, _bz_MatExpr<P_expr2> d2)
3750{
3751 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
3752 _bz_MatExpr<P_expr2>,
3753 _bz_Less<complex<double> , _bz_typename P_expr2::T_numtype> > T_expr;
3754
3755 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
3756 d2));
3757}
3758#endif // BZ_HAVE_COMPLEX
3759
3760#ifdef BZ_HAVE_COMPLEX
3761// complex<long double> < Matrix<P_numtype2, P_struct2>
3762template<class P_numtype2, class P_struct2>
3763inline
3764_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
3765 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Less<complex<long double> , P_numtype2> > >
3766operator<(complex<long double> d1, const Matrix<P_numtype2, P_struct2>& d2)
3767{
3768 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
3769 _bz_MatrixRef<P_numtype2, P_struct2>,
3770 _bz_Less<complex<long double> , P_numtype2> > T_expr;
3771
3772 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
3773 d2._bz_getRef()));
3774}
3775#endif // BZ_HAVE_COMPLEX
3776
3777#ifdef BZ_HAVE_COMPLEX
3778// complex<long double> < _bz_MatExpr<P_expr2>
3779template<class P_expr2>
3780inline
3781_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
3782 _bz_MatExpr<P_expr2>, _bz_Less<complex<long double> , _bz_typename P_expr2::T_numtype> > >
3783operator<(complex<long double> d1, _bz_MatExpr<P_expr2> d2)
3784{
3785 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
3786 _bz_MatExpr<P_expr2>,
3787 _bz_Less<complex<long double> , _bz_typename P_expr2::T_numtype> > T_expr;
3788
3789 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
3790 d2));
3791}
3792#endif // BZ_HAVE_COMPLEX
3793/****************************************************************************
3794 * Greater or equal (>=) operators
3795 ****************************************************************************/
3796
3797// Matrix<P_numtype1, P_struct1> >= Matrix<P_numtype2, P_struct2>
3798template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
3799inline
3800_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3801 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_GreaterOrEqual<P_numtype1, P_numtype2> > >
3802operator>=(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
3803{
3804 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3805 _bz_MatrixRef<P_numtype2, P_struct2>,
3806 _bz_GreaterOrEqual<P_numtype1, P_numtype2> > T_expr;
3807
3808 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3809 d2._bz_getRef()));
3810}
3811
3812// Matrix<P_numtype1, P_struct1> >= _bz_MatExpr<P_expr2>
3813template<class P_numtype1, class P_struct1, class P_expr2>
3814inline
3815_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3816 _bz_MatExpr<P_expr2>, _bz_GreaterOrEqual<P_numtype1, _bz_typename P_expr2::T_numtype> > >
3817operator>=(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
3818{
3819 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3820 _bz_MatExpr<P_expr2>,
3821 _bz_GreaterOrEqual<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
3822
3823 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3824 d2));
3825}
3826
3827// Matrix<P_numtype1, P_struct1> >= int
3828template<class P_numtype1, class P_struct1>
3829inline
3830_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3831 _bz_MatExprConstant<int>, _bz_GreaterOrEqual<P_numtype1, int> > >
3832operator>=(const Matrix<P_numtype1, P_struct1>& d1, int d2)
3833{
3834 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3835 _bz_MatExprConstant<int>,
3836 _bz_GreaterOrEqual<P_numtype1, int> > T_expr;
3837
3838 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3839 _bz_MatExprConstant<int>(d2)));
3840}
3841
3842// Matrix<P_numtype1, P_struct1> >= float
3843template<class P_numtype1, class P_struct1>
3844inline
3845_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3846 _bz_MatExprConstant<float>, _bz_GreaterOrEqual<P_numtype1, float> > >
3847operator>=(const Matrix<P_numtype1, P_struct1>& d1, float d2)
3848{
3849 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3850 _bz_MatExprConstant<float>,
3851 _bz_GreaterOrEqual<P_numtype1, float> > T_expr;
3852
3853 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3854 _bz_MatExprConstant<float>(d2)));
3855}
3856
3857// Matrix<P_numtype1, P_struct1> >= double
3858template<class P_numtype1, class P_struct1>
3859inline
3860_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3861 _bz_MatExprConstant<double>, _bz_GreaterOrEqual<P_numtype1, double> > >
3862operator>=(const Matrix<P_numtype1, P_struct1>& d1, double d2)
3863{
3864 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3865 _bz_MatExprConstant<double>,
3866 _bz_GreaterOrEqual<P_numtype1, double> > T_expr;
3867
3868 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3869 _bz_MatExprConstant<double>(d2)));
3870}
3871
3872// Matrix<P_numtype1, P_struct1> >= long double
3873template<class P_numtype1, class P_struct1>
3874inline
3875_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3876 _bz_MatExprConstant<long double>, _bz_GreaterOrEqual<P_numtype1, long double> > >
3877operator>=(const Matrix<P_numtype1, P_struct1>& d1, long double d2)
3878{
3879 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3880 _bz_MatExprConstant<long double>,
3881 _bz_GreaterOrEqual<P_numtype1, long double> > T_expr;
3882
3883 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3884 _bz_MatExprConstant<long double>(d2)));
3885}
3886
3887#ifdef BZ_HAVE_COMPLEX
3888// Matrix<P_numtype1, P_struct1> >= complex<float>
3889template<class P_numtype1, class P_struct1>
3890inline
3891_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3892 _bz_MatExprConstant<complex<float> >, _bz_GreaterOrEqual<P_numtype1, complex<float> > > >
3893operator>=(const Matrix<P_numtype1, P_struct1>& d1, complex<float> d2)
3894{
3895 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3896 _bz_MatExprConstant<complex<float> >,
3897 _bz_GreaterOrEqual<P_numtype1, complex<float> > > T_expr;
3898
3899 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3900 _bz_MatExprConstant<complex<float> >(d2)));
3901}
3902#endif // BZ_HAVE_COMPLEX
3903
3904#ifdef BZ_HAVE_COMPLEX
3905// Matrix<P_numtype1, P_struct1> >= complex<double>
3906template<class P_numtype1, class P_struct1>
3907inline
3908_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3909 _bz_MatExprConstant<complex<double> >, _bz_GreaterOrEqual<P_numtype1, complex<double> > > >
3910operator>=(const Matrix<P_numtype1, P_struct1>& d1, complex<double> d2)
3911{
3912 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3913 _bz_MatExprConstant<complex<double> >,
3914 _bz_GreaterOrEqual<P_numtype1, complex<double> > > T_expr;
3915
3916 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3917 _bz_MatExprConstant<complex<double> >(d2)));
3918}
3919#endif // BZ_HAVE_COMPLEX
3920
3921#ifdef BZ_HAVE_COMPLEX
3922// Matrix<P_numtype1, P_struct1> >= complex<long double>
3923template<class P_numtype1, class P_struct1>
3924inline
3925_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3926 _bz_MatExprConstant<complex<long double> >, _bz_GreaterOrEqual<P_numtype1, complex<long double> > > >
3927operator>=(const Matrix<P_numtype1, P_struct1>& d1, complex<long double> d2)
3928{
3929 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
3930 _bz_MatExprConstant<complex<long double> >,
3931 _bz_GreaterOrEqual<P_numtype1, complex<long double> > > T_expr;
3932
3933 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
3934 _bz_MatExprConstant<complex<long double> >(d2)));
3935}
3936#endif // BZ_HAVE_COMPLEX
3937
3938// _bz_MatExpr<P_expr1> >= Matrix<P_numtype2, P_struct2>
3939template<class P_expr1, class P_numtype2, class P_struct2>
3940inline
3941_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3942 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, P_numtype2> > >
3943operator>=(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
3944{
3945 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3946 _bz_MatrixRef<P_numtype2, P_struct2>,
3947 _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
3948
3949 return _bz_MatExpr<T_expr>(T_expr(d1,
3950 d2._bz_getRef()));
3951}
3952
3953// _bz_MatExpr<P_expr1> >= _bz_MatExpr<P_expr2>
3954template<class P_expr1, class P_expr2>
3955inline
3956_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3957 _bz_MatExpr<P_expr2>, _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
3958operator>=(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
3959{
3960 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3961 _bz_MatExpr<P_expr2>,
3962 _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
3963
3964 return _bz_MatExpr<T_expr>(T_expr(d1,
3965 d2));
3966}
3967
3968// _bz_MatExpr<P_expr1> >= int
3969template<class P_expr1>
3970inline
3971_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3972 _bz_MatExprConstant<int>, _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, int> > >
3973operator>=(_bz_MatExpr<P_expr1> d1, int d2)
3974{
3975 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3976 _bz_MatExprConstant<int>,
3977 _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, int> > T_expr;
3978
3979 return _bz_MatExpr<T_expr>(T_expr(d1,
3980 _bz_MatExprConstant<int>(d2)));
3981}
3982
3983// _bz_MatExpr<P_expr1> >= float
3984template<class P_expr1>
3985inline
3986_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
3987 _bz_MatExprConstant<float>, _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, float> > >
3988operator>=(_bz_MatExpr<P_expr1> d1, float d2)
3989{
3990 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
3991 _bz_MatExprConstant<float>,
3992 _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, float> > T_expr;
3993
3994 return _bz_MatExpr<T_expr>(T_expr(d1,
3995 _bz_MatExprConstant<float>(d2)));
3996}
3997
3998// _bz_MatExpr<P_expr1> >= double
3999template<class P_expr1>
4000inline
4001_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4002 _bz_MatExprConstant<double>, _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, double> > >
4003operator>=(_bz_MatExpr<P_expr1> d1, double d2)
4004{
4005 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4006 _bz_MatExprConstant<double>,
4007 _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, double> > T_expr;
4008
4009 return _bz_MatExpr<T_expr>(T_expr(d1,
4010 _bz_MatExprConstant<double>(d2)));
4011}
4012
4013// _bz_MatExpr<P_expr1> >= long double
4014template<class P_expr1>
4015inline
4016_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4017 _bz_MatExprConstant<long double>, _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, long double> > >
4018operator>=(_bz_MatExpr<P_expr1> d1, long double d2)
4019{
4020 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4021 _bz_MatExprConstant<long double>,
4022 _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, long double> > T_expr;
4023
4024 return _bz_MatExpr<T_expr>(T_expr(d1,
4025 _bz_MatExprConstant<long double>(d2)));
4026}
4027
4028#ifdef BZ_HAVE_COMPLEX
4029// _bz_MatExpr<P_expr1> >= complex<float>
4030template<class P_expr1>
4031inline
4032_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4033 _bz_MatExprConstant<complex<float> >, _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, complex<float> > > >
4034operator>=(_bz_MatExpr<P_expr1> d1, complex<float> d2)
4035{
4036 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4037 _bz_MatExprConstant<complex<float> >,
4038 _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, complex<float> > > T_expr;
4039
4040 return _bz_MatExpr<T_expr>(T_expr(d1,
4041 _bz_MatExprConstant<complex<float> >(d2)));
4042}
4043#endif // BZ_HAVE_COMPLEX
4044
4045#ifdef BZ_HAVE_COMPLEX
4046// _bz_MatExpr<P_expr1> >= complex<double>
4047template<class P_expr1>
4048inline
4049_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4050 _bz_MatExprConstant<complex<double> >, _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, complex<double> > > >
4051operator>=(_bz_MatExpr<P_expr1> d1, complex<double> d2)
4052{
4053 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4054 _bz_MatExprConstant<complex<double> >,
4055 _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, complex<double> > > T_expr;
4056
4057 return _bz_MatExpr<T_expr>(T_expr(d1,
4058 _bz_MatExprConstant<complex<double> >(d2)));
4059}
4060#endif // BZ_HAVE_COMPLEX
4061
4062#ifdef BZ_HAVE_COMPLEX
4063// _bz_MatExpr<P_expr1> >= complex<long double>
4064template<class P_expr1>
4065inline
4066_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4067 _bz_MatExprConstant<complex<long double> >, _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, complex<long double> > > >
4068operator>=(_bz_MatExpr<P_expr1> d1, complex<long double> d2)
4069{
4070 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4071 _bz_MatExprConstant<complex<long double> >,
4072 _bz_GreaterOrEqual<_bz_typename P_expr1::T_numtype, complex<long double> > > T_expr;
4073
4074 return _bz_MatExpr<T_expr>(T_expr(d1,
4075 _bz_MatExprConstant<complex<long double> >(d2)));
4076}
4077#endif // BZ_HAVE_COMPLEX
4078
4079// int >= Matrix<P_numtype2, P_struct2>
4080template<class P_numtype2, class P_struct2>
4081inline
4082_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
4083 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_GreaterOrEqual<int, P_numtype2> > >
4084operator>=(int d1, const Matrix<P_numtype2, P_struct2>& d2)
4085{
4086 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
4087 _bz_MatrixRef<P_numtype2, P_struct2>,
4088 _bz_GreaterOrEqual<int, P_numtype2> > T_expr;
4089
4090 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
4091 d2._bz_getRef()));
4092}
4093
4094// int >= _bz_MatExpr<P_expr2>
4095template<class P_expr2>
4096inline
4097_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
4098 _bz_MatExpr<P_expr2>, _bz_GreaterOrEqual<int, _bz_typename P_expr2::T_numtype> > >
4099operator>=(int d1, _bz_MatExpr<P_expr2> d2)
4100{
4101 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
4102 _bz_MatExpr<P_expr2>,
4103 _bz_GreaterOrEqual<int, _bz_typename P_expr2::T_numtype> > T_expr;
4104
4105 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
4106 d2));
4107}
4108
4109// float >= Matrix<P_numtype2, P_struct2>
4110template<class P_numtype2, class P_struct2>
4111inline
4112_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
4113 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_GreaterOrEqual<float, P_numtype2> > >
4114operator>=(float d1, const Matrix<P_numtype2, P_struct2>& d2)
4115{
4116 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
4117 _bz_MatrixRef<P_numtype2, P_struct2>,
4118 _bz_GreaterOrEqual<float, P_numtype2> > T_expr;
4119
4120 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
4121 d2._bz_getRef()));
4122}
4123
4124// float >= _bz_MatExpr<P_expr2>
4125template<class P_expr2>
4126inline
4127_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
4128 _bz_MatExpr<P_expr2>, _bz_GreaterOrEqual<float, _bz_typename P_expr2::T_numtype> > >
4129operator>=(float d1, _bz_MatExpr<P_expr2> d2)
4130{
4131 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
4132 _bz_MatExpr<P_expr2>,
4133 _bz_GreaterOrEqual<float, _bz_typename P_expr2::T_numtype> > T_expr;
4134
4135 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
4136 d2));
4137}
4138
4139// double >= Matrix<P_numtype2, P_struct2>
4140template<class P_numtype2, class P_struct2>
4141inline
4142_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
4143 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_GreaterOrEqual<double, P_numtype2> > >
4144operator>=(double d1, const Matrix<P_numtype2, P_struct2>& d2)
4145{
4146 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
4147 _bz_MatrixRef<P_numtype2, P_struct2>,
4148 _bz_GreaterOrEqual<double, P_numtype2> > T_expr;
4149
4150 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
4151 d2._bz_getRef()));
4152}
4153
4154// double >= _bz_MatExpr<P_expr2>
4155template<class P_expr2>
4156inline
4157_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
4158 _bz_MatExpr<P_expr2>, _bz_GreaterOrEqual<double, _bz_typename P_expr2::T_numtype> > >
4159operator>=(double d1, _bz_MatExpr<P_expr2> d2)
4160{
4161 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
4162 _bz_MatExpr<P_expr2>,
4163 _bz_GreaterOrEqual<double, _bz_typename P_expr2::T_numtype> > T_expr;
4164
4165 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
4166 d2));
4167}
4168
4169// long double >= Matrix<P_numtype2, P_struct2>
4170template<class P_numtype2, class P_struct2>
4171inline
4172_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
4173 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_GreaterOrEqual<long double, P_numtype2> > >
4174operator>=(long double d1, const Matrix<P_numtype2, P_struct2>& d2)
4175{
4176 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
4177 _bz_MatrixRef<P_numtype2, P_struct2>,
4178 _bz_GreaterOrEqual<long double, P_numtype2> > T_expr;
4179
4180 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
4181 d2._bz_getRef()));
4182}
4183
4184// long double >= _bz_MatExpr<P_expr2>
4185template<class P_expr2>
4186inline
4187_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
4188 _bz_MatExpr<P_expr2>, _bz_GreaterOrEqual<long double, _bz_typename P_expr2::T_numtype> > >
4189operator>=(long double d1, _bz_MatExpr<P_expr2> d2)
4190{
4191 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
4192 _bz_MatExpr<P_expr2>,
4193 _bz_GreaterOrEqual<long double, _bz_typename P_expr2::T_numtype> > T_expr;
4194
4195 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
4196 d2));
4197}
4198
4199#ifdef BZ_HAVE_COMPLEX
4200// complex<float> >= Matrix<P_numtype2, P_struct2>
4201template<class P_numtype2, class P_struct2>
4202inline
4203_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
4204 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_GreaterOrEqual<complex<float> , P_numtype2> > >
4205operator>=(complex<float> d1, const Matrix<P_numtype2, P_struct2>& d2)
4206{
4207 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
4208 _bz_MatrixRef<P_numtype2, P_struct2>,
4209 _bz_GreaterOrEqual<complex<float> , P_numtype2> > T_expr;
4210
4211 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
4212 d2._bz_getRef()));
4213}
4214#endif // BZ_HAVE_COMPLEX
4215
4216#ifdef BZ_HAVE_COMPLEX
4217// complex<float> >= _bz_MatExpr<P_expr2>
4218template<class P_expr2>
4219inline
4220_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
4221 _bz_MatExpr<P_expr2>, _bz_GreaterOrEqual<complex<float> , _bz_typename P_expr2::T_numtype> > >
4222operator>=(complex<float> d1, _bz_MatExpr<P_expr2> d2)
4223{
4224 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
4225 _bz_MatExpr<P_expr2>,
4226 _bz_GreaterOrEqual<complex<float> , _bz_typename P_expr2::T_numtype> > T_expr;
4227
4228 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
4229 d2));
4230}
4231#endif // BZ_HAVE_COMPLEX
4232
4233#ifdef BZ_HAVE_COMPLEX
4234// complex<double> >= Matrix<P_numtype2, P_struct2>
4235template<class P_numtype2, class P_struct2>
4236inline
4237_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
4238 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_GreaterOrEqual<complex<double> , P_numtype2> > >
4239operator>=(complex<double> d1, const Matrix<P_numtype2, P_struct2>& d2)
4240{
4241 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
4242 _bz_MatrixRef<P_numtype2, P_struct2>,
4243 _bz_GreaterOrEqual<complex<double> , P_numtype2> > T_expr;
4244
4245 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
4246 d2._bz_getRef()));
4247}
4248#endif // BZ_HAVE_COMPLEX
4249
4250#ifdef BZ_HAVE_COMPLEX
4251// complex<double> >= _bz_MatExpr<P_expr2>
4252template<class P_expr2>
4253inline
4254_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
4255 _bz_MatExpr<P_expr2>, _bz_GreaterOrEqual<complex<double> , _bz_typename P_expr2::T_numtype> > >
4256operator>=(complex<double> d1, _bz_MatExpr<P_expr2> d2)
4257{
4258 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
4259 _bz_MatExpr<P_expr2>,
4260 _bz_GreaterOrEqual<complex<double> , _bz_typename P_expr2::T_numtype> > T_expr;
4261
4262 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
4263 d2));
4264}
4265#endif // BZ_HAVE_COMPLEX
4266
4267#ifdef BZ_HAVE_COMPLEX
4268// complex<long double> >= Matrix<P_numtype2, P_struct2>
4269template<class P_numtype2, class P_struct2>
4270inline
4271_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
4272 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_GreaterOrEqual<complex<long double> , P_numtype2> > >
4273operator>=(complex<long double> d1, const Matrix<P_numtype2, P_struct2>& d2)
4274{
4275 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
4276 _bz_MatrixRef<P_numtype2, P_struct2>,
4277 _bz_GreaterOrEqual<complex<long double> , P_numtype2> > T_expr;
4278
4279 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
4280 d2._bz_getRef()));
4281}
4282#endif // BZ_HAVE_COMPLEX
4283
4284#ifdef BZ_HAVE_COMPLEX
4285// complex<long double> >= _bz_MatExpr<P_expr2>
4286template<class P_expr2>
4287inline
4288_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
4289 _bz_MatExpr<P_expr2>, _bz_GreaterOrEqual<complex<long double> , _bz_typename P_expr2::T_numtype> > >
4290operator>=(complex<long double> d1, _bz_MatExpr<P_expr2> d2)
4291{
4292 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
4293 _bz_MatExpr<P_expr2>,
4294 _bz_GreaterOrEqual<complex<long double> , _bz_typename P_expr2::T_numtype> > T_expr;
4295
4296 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
4297 d2));
4298}
4299#endif // BZ_HAVE_COMPLEX
4300/****************************************************************************
4301 * Less or equal (<=) operators
4302 ****************************************************************************/
4303
4304// Matrix<P_numtype1, P_struct1> <= Matrix<P_numtype2, P_struct2>
4305template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
4306inline
4307_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4308 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LessOrEqual<P_numtype1, P_numtype2> > >
4309operator<=(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
4310{
4311 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4312 _bz_MatrixRef<P_numtype2, P_struct2>,
4313 _bz_LessOrEqual<P_numtype1, P_numtype2> > T_expr;
4314
4315 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4316 d2._bz_getRef()));
4317}
4318
4319// Matrix<P_numtype1, P_struct1> <= _bz_MatExpr<P_expr2>
4320template<class P_numtype1, class P_struct1, class P_expr2>
4321inline
4322_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4323 _bz_MatExpr<P_expr2>, _bz_LessOrEqual<P_numtype1, _bz_typename P_expr2::T_numtype> > >
4324operator<=(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
4325{
4326 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4327 _bz_MatExpr<P_expr2>,
4328 _bz_LessOrEqual<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
4329
4330 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4331 d2));
4332}
4333
4334// Matrix<P_numtype1, P_struct1> <= int
4335template<class P_numtype1, class P_struct1>
4336inline
4337_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4338 _bz_MatExprConstant<int>, _bz_LessOrEqual<P_numtype1, int> > >
4339operator<=(const Matrix<P_numtype1, P_struct1>& d1, int d2)
4340{
4341 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4342 _bz_MatExprConstant<int>,
4343 _bz_LessOrEqual<P_numtype1, int> > T_expr;
4344
4345 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4346 _bz_MatExprConstant<int>(d2)));
4347}
4348
4349// Matrix<P_numtype1, P_struct1> <= float
4350template<class P_numtype1, class P_struct1>
4351inline
4352_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4353 _bz_MatExprConstant<float>, _bz_LessOrEqual<P_numtype1, float> > >
4354operator<=(const Matrix<P_numtype1, P_struct1>& d1, float d2)
4355{
4356 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4357 _bz_MatExprConstant<float>,
4358 _bz_LessOrEqual<P_numtype1, float> > T_expr;
4359
4360 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4361 _bz_MatExprConstant<float>(d2)));
4362}
4363
4364// Matrix<P_numtype1, P_struct1> <= double
4365template<class P_numtype1, class P_struct1>
4366inline
4367_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4368 _bz_MatExprConstant<double>, _bz_LessOrEqual<P_numtype1, double> > >
4369operator<=(const Matrix<P_numtype1, P_struct1>& d1, double d2)
4370{
4371 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4372 _bz_MatExprConstant<double>,
4373 _bz_LessOrEqual<P_numtype1, double> > T_expr;
4374
4375 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4376 _bz_MatExprConstant<double>(d2)));
4377}
4378
4379// Matrix<P_numtype1, P_struct1> <= long double
4380template<class P_numtype1, class P_struct1>
4381inline
4382_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4383 _bz_MatExprConstant<long double>, _bz_LessOrEqual<P_numtype1, long double> > >
4384operator<=(const Matrix<P_numtype1, P_struct1>& d1, long double d2)
4385{
4386 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4387 _bz_MatExprConstant<long double>,
4388 _bz_LessOrEqual<P_numtype1, long double> > T_expr;
4389
4390 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4391 _bz_MatExprConstant<long double>(d2)));
4392}
4393
4394#ifdef BZ_HAVE_COMPLEX
4395// Matrix<P_numtype1, P_struct1> <= complex<float>
4396template<class P_numtype1, class P_struct1>
4397inline
4398_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4399 _bz_MatExprConstant<complex<float> >, _bz_LessOrEqual<P_numtype1, complex<float> > > >
4400operator<=(const Matrix<P_numtype1, P_struct1>& d1, complex<float> d2)
4401{
4402 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4403 _bz_MatExprConstant<complex<float> >,
4404 _bz_LessOrEqual<P_numtype1, complex<float> > > T_expr;
4405
4406 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4407 _bz_MatExprConstant<complex<float> >(d2)));
4408}
4409#endif // BZ_HAVE_COMPLEX
4410
4411#ifdef BZ_HAVE_COMPLEX
4412// Matrix<P_numtype1, P_struct1> <= complex<double>
4413template<class P_numtype1, class P_struct1>
4414inline
4415_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4416 _bz_MatExprConstant<complex<double> >, _bz_LessOrEqual<P_numtype1, complex<double> > > >
4417operator<=(const Matrix<P_numtype1, P_struct1>& d1, complex<double> d2)
4418{
4419 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4420 _bz_MatExprConstant<complex<double> >,
4421 _bz_LessOrEqual<P_numtype1, complex<double> > > T_expr;
4422
4423 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4424 _bz_MatExprConstant<complex<double> >(d2)));
4425}
4426#endif // BZ_HAVE_COMPLEX
4427
4428#ifdef BZ_HAVE_COMPLEX
4429// Matrix<P_numtype1, P_struct1> <= complex<long double>
4430template<class P_numtype1, class P_struct1>
4431inline
4432_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4433 _bz_MatExprConstant<complex<long double> >, _bz_LessOrEqual<P_numtype1, complex<long double> > > >
4434operator<=(const Matrix<P_numtype1, P_struct1>& d1, complex<long double> d2)
4435{
4436 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4437 _bz_MatExprConstant<complex<long double> >,
4438 _bz_LessOrEqual<P_numtype1, complex<long double> > > T_expr;
4439
4440 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4441 _bz_MatExprConstant<complex<long double> >(d2)));
4442}
4443#endif // BZ_HAVE_COMPLEX
4444
4445// _bz_MatExpr<P_expr1> <= Matrix<P_numtype2, P_struct2>
4446template<class P_expr1, class P_numtype2, class P_struct2>
4447inline
4448_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4449 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, P_numtype2> > >
4450operator<=(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
4451{
4452 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4453 _bz_MatrixRef<P_numtype2, P_struct2>,
4454 _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
4455
4456 return _bz_MatExpr<T_expr>(T_expr(d1,
4457 d2._bz_getRef()));
4458}
4459
4460// _bz_MatExpr<P_expr1> <= _bz_MatExpr<P_expr2>
4461template<class P_expr1, class P_expr2>
4462inline
4463_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4464 _bz_MatExpr<P_expr2>, _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
4465operator<=(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
4466{
4467 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4468 _bz_MatExpr<P_expr2>,
4469 _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
4470
4471 return _bz_MatExpr<T_expr>(T_expr(d1,
4472 d2));
4473}
4474
4475// _bz_MatExpr<P_expr1> <= int
4476template<class P_expr1>
4477inline
4478_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4479 _bz_MatExprConstant<int>, _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, int> > >
4480operator<=(_bz_MatExpr<P_expr1> d1, int d2)
4481{
4482 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4483 _bz_MatExprConstant<int>,
4484 _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, int> > T_expr;
4485
4486 return _bz_MatExpr<T_expr>(T_expr(d1,
4487 _bz_MatExprConstant<int>(d2)));
4488}
4489
4490// _bz_MatExpr<P_expr1> <= float
4491template<class P_expr1>
4492inline
4493_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4494 _bz_MatExprConstant<float>, _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, float> > >
4495operator<=(_bz_MatExpr<P_expr1> d1, float d2)
4496{
4497 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4498 _bz_MatExprConstant<float>,
4499 _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, float> > T_expr;
4500
4501 return _bz_MatExpr<T_expr>(T_expr(d1,
4502 _bz_MatExprConstant<float>(d2)));
4503}
4504
4505// _bz_MatExpr<P_expr1> <= double
4506template<class P_expr1>
4507inline
4508_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4509 _bz_MatExprConstant<double>, _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, double> > >
4510operator<=(_bz_MatExpr<P_expr1> d1, double d2)
4511{
4512 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4513 _bz_MatExprConstant<double>,
4514 _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, double> > T_expr;
4515
4516 return _bz_MatExpr<T_expr>(T_expr(d1,
4517 _bz_MatExprConstant<double>(d2)));
4518}
4519
4520// _bz_MatExpr<P_expr1> <= long double
4521template<class P_expr1>
4522inline
4523_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4524 _bz_MatExprConstant<long double>, _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, long double> > >
4525operator<=(_bz_MatExpr<P_expr1> d1, long double d2)
4526{
4527 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4528 _bz_MatExprConstant<long double>,
4529 _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, long double> > T_expr;
4530
4531 return _bz_MatExpr<T_expr>(T_expr(d1,
4532 _bz_MatExprConstant<long double>(d2)));
4533}
4534
4535#ifdef BZ_HAVE_COMPLEX
4536// _bz_MatExpr<P_expr1> <= complex<float>
4537template<class P_expr1>
4538inline
4539_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4540 _bz_MatExprConstant<complex<float> >, _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, complex<float> > > >
4541operator<=(_bz_MatExpr<P_expr1> d1, complex<float> d2)
4542{
4543 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4544 _bz_MatExprConstant<complex<float> >,
4545 _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, complex<float> > > T_expr;
4546
4547 return _bz_MatExpr<T_expr>(T_expr(d1,
4548 _bz_MatExprConstant<complex<float> >(d2)));
4549}
4550#endif // BZ_HAVE_COMPLEX
4551
4552#ifdef BZ_HAVE_COMPLEX
4553// _bz_MatExpr<P_expr1> <= complex<double>
4554template<class P_expr1>
4555inline
4556_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4557 _bz_MatExprConstant<complex<double> >, _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, complex<double> > > >
4558operator<=(_bz_MatExpr<P_expr1> d1, complex<double> d2)
4559{
4560 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4561 _bz_MatExprConstant<complex<double> >,
4562 _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, complex<double> > > T_expr;
4563
4564 return _bz_MatExpr<T_expr>(T_expr(d1,
4565 _bz_MatExprConstant<complex<double> >(d2)));
4566}
4567#endif // BZ_HAVE_COMPLEX
4568
4569#ifdef BZ_HAVE_COMPLEX
4570// _bz_MatExpr<P_expr1> <= complex<long double>
4571template<class P_expr1>
4572inline
4573_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4574 _bz_MatExprConstant<complex<long double> >, _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, complex<long double> > > >
4575operator<=(_bz_MatExpr<P_expr1> d1, complex<long double> d2)
4576{
4577 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4578 _bz_MatExprConstant<complex<long double> >,
4579 _bz_LessOrEqual<_bz_typename P_expr1::T_numtype, complex<long double> > > T_expr;
4580
4581 return _bz_MatExpr<T_expr>(T_expr(d1,
4582 _bz_MatExprConstant<complex<long double> >(d2)));
4583}
4584#endif // BZ_HAVE_COMPLEX
4585
4586// int <= Matrix<P_numtype2, P_struct2>
4587template<class P_numtype2, class P_struct2>
4588inline
4589_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
4590 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LessOrEqual<int, P_numtype2> > >
4591operator<=(int d1, const Matrix<P_numtype2, P_struct2>& d2)
4592{
4593 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
4594 _bz_MatrixRef<P_numtype2, P_struct2>,
4595 _bz_LessOrEqual<int, P_numtype2> > T_expr;
4596
4597 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
4598 d2._bz_getRef()));
4599}
4600
4601// int <= _bz_MatExpr<P_expr2>
4602template<class P_expr2>
4603inline
4604_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
4605 _bz_MatExpr<P_expr2>, _bz_LessOrEqual<int, _bz_typename P_expr2::T_numtype> > >
4606operator<=(int d1, _bz_MatExpr<P_expr2> d2)
4607{
4608 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
4609 _bz_MatExpr<P_expr2>,
4610 _bz_LessOrEqual<int, _bz_typename P_expr2::T_numtype> > T_expr;
4611
4612 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
4613 d2));
4614}
4615
4616// float <= Matrix<P_numtype2, P_struct2>
4617template<class P_numtype2, class P_struct2>
4618inline
4619_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
4620 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LessOrEqual<float, P_numtype2> > >
4621operator<=(float d1, const Matrix<P_numtype2, P_struct2>& d2)
4622{
4623 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
4624 _bz_MatrixRef<P_numtype2, P_struct2>,
4625 _bz_LessOrEqual<float, P_numtype2> > T_expr;
4626
4627 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
4628 d2._bz_getRef()));
4629}
4630
4631// float <= _bz_MatExpr<P_expr2>
4632template<class P_expr2>
4633inline
4634_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
4635 _bz_MatExpr<P_expr2>, _bz_LessOrEqual<float, _bz_typename P_expr2::T_numtype> > >
4636operator<=(float d1, _bz_MatExpr<P_expr2> d2)
4637{
4638 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
4639 _bz_MatExpr<P_expr2>,
4640 _bz_LessOrEqual<float, _bz_typename P_expr2::T_numtype> > T_expr;
4641
4642 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
4643 d2));
4644}
4645
4646// double <= Matrix<P_numtype2, P_struct2>
4647template<class P_numtype2, class P_struct2>
4648inline
4649_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
4650 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LessOrEqual<double, P_numtype2> > >
4651operator<=(double d1, const Matrix<P_numtype2, P_struct2>& d2)
4652{
4653 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
4654 _bz_MatrixRef<P_numtype2, P_struct2>,
4655 _bz_LessOrEqual<double, P_numtype2> > T_expr;
4656
4657 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
4658 d2._bz_getRef()));
4659}
4660
4661// double <= _bz_MatExpr<P_expr2>
4662template<class P_expr2>
4663inline
4664_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
4665 _bz_MatExpr<P_expr2>, _bz_LessOrEqual<double, _bz_typename P_expr2::T_numtype> > >
4666operator<=(double d1, _bz_MatExpr<P_expr2> d2)
4667{
4668 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
4669 _bz_MatExpr<P_expr2>,
4670 _bz_LessOrEqual<double, _bz_typename P_expr2::T_numtype> > T_expr;
4671
4672 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
4673 d2));
4674}
4675
4676// long double <= Matrix<P_numtype2, P_struct2>
4677template<class P_numtype2, class P_struct2>
4678inline
4679_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
4680 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LessOrEqual<long double, P_numtype2> > >
4681operator<=(long double d1, const Matrix<P_numtype2, P_struct2>& d2)
4682{
4683 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
4684 _bz_MatrixRef<P_numtype2, P_struct2>,
4685 _bz_LessOrEqual<long double, P_numtype2> > T_expr;
4686
4687 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
4688 d2._bz_getRef()));
4689}
4690
4691// long double <= _bz_MatExpr<P_expr2>
4692template<class P_expr2>
4693inline
4694_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
4695 _bz_MatExpr<P_expr2>, _bz_LessOrEqual<long double, _bz_typename P_expr2::T_numtype> > >
4696operator<=(long double d1, _bz_MatExpr<P_expr2> d2)
4697{
4698 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
4699 _bz_MatExpr<P_expr2>,
4700 _bz_LessOrEqual<long double, _bz_typename P_expr2::T_numtype> > T_expr;
4701
4702 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
4703 d2));
4704}
4705
4706#ifdef BZ_HAVE_COMPLEX
4707// complex<float> <= Matrix<P_numtype2, P_struct2>
4708template<class P_numtype2, class P_struct2>
4709inline
4710_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
4711 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LessOrEqual<complex<float> , P_numtype2> > >
4712operator<=(complex<float> d1, const Matrix<P_numtype2, P_struct2>& d2)
4713{
4714 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
4715 _bz_MatrixRef<P_numtype2, P_struct2>,
4716 _bz_LessOrEqual<complex<float> , P_numtype2> > T_expr;
4717
4718 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
4719 d2._bz_getRef()));
4720}
4721#endif // BZ_HAVE_COMPLEX
4722
4723#ifdef BZ_HAVE_COMPLEX
4724// complex<float> <= _bz_MatExpr<P_expr2>
4725template<class P_expr2>
4726inline
4727_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
4728 _bz_MatExpr<P_expr2>, _bz_LessOrEqual<complex<float> , _bz_typename P_expr2::T_numtype> > >
4729operator<=(complex<float> d1, _bz_MatExpr<P_expr2> d2)
4730{
4731 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
4732 _bz_MatExpr<P_expr2>,
4733 _bz_LessOrEqual<complex<float> , _bz_typename P_expr2::T_numtype> > T_expr;
4734
4735 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
4736 d2));
4737}
4738#endif // BZ_HAVE_COMPLEX
4739
4740#ifdef BZ_HAVE_COMPLEX
4741// complex<double> <= Matrix<P_numtype2, P_struct2>
4742template<class P_numtype2, class P_struct2>
4743inline
4744_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
4745 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LessOrEqual<complex<double> , P_numtype2> > >
4746operator<=(complex<double> d1, const Matrix<P_numtype2, P_struct2>& d2)
4747{
4748 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
4749 _bz_MatrixRef<P_numtype2, P_struct2>,
4750 _bz_LessOrEqual<complex<double> , P_numtype2> > T_expr;
4751
4752 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
4753 d2._bz_getRef()));
4754}
4755#endif // BZ_HAVE_COMPLEX
4756
4757#ifdef BZ_HAVE_COMPLEX
4758// complex<double> <= _bz_MatExpr<P_expr2>
4759template<class P_expr2>
4760inline
4761_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
4762 _bz_MatExpr<P_expr2>, _bz_LessOrEqual<complex<double> , _bz_typename P_expr2::T_numtype> > >
4763operator<=(complex<double> d1, _bz_MatExpr<P_expr2> d2)
4764{
4765 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
4766 _bz_MatExpr<P_expr2>,
4767 _bz_LessOrEqual<complex<double> , _bz_typename P_expr2::T_numtype> > T_expr;
4768
4769 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
4770 d2));
4771}
4772#endif // BZ_HAVE_COMPLEX
4773
4774#ifdef BZ_HAVE_COMPLEX
4775// complex<long double> <= Matrix<P_numtype2, P_struct2>
4776template<class P_numtype2, class P_struct2>
4777inline
4778_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
4779 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LessOrEqual<complex<long double> , P_numtype2> > >
4780operator<=(complex<long double> d1, const Matrix<P_numtype2, P_struct2>& d2)
4781{
4782 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
4783 _bz_MatrixRef<P_numtype2, P_struct2>,
4784 _bz_LessOrEqual<complex<long double> , P_numtype2> > T_expr;
4785
4786 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
4787 d2._bz_getRef()));
4788}
4789#endif // BZ_HAVE_COMPLEX
4790
4791#ifdef BZ_HAVE_COMPLEX
4792// complex<long double> <= _bz_MatExpr<P_expr2>
4793template<class P_expr2>
4794inline
4795_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
4796 _bz_MatExpr<P_expr2>, _bz_LessOrEqual<complex<long double> , _bz_typename P_expr2::T_numtype> > >
4797operator<=(complex<long double> d1, _bz_MatExpr<P_expr2> d2)
4798{
4799 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
4800 _bz_MatExpr<P_expr2>,
4801 _bz_LessOrEqual<complex<long double> , _bz_typename P_expr2::T_numtype> > T_expr;
4802
4803 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
4804 d2));
4805}
4806#endif // BZ_HAVE_COMPLEX
4807/****************************************************************************
4808 * Equality operators
4809 ****************************************************************************/
4810
4811// Matrix<P_numtype1, P_struct1> == Matrix<P_numtype2, P_struct2>
4812template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
4813inline
4814_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4815 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Equal<P_numtype1, P_numtype2> > >
4816operator==(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
4817{
4818 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4819 _bz_MatrixRef<P_numtype2, P_struct2>,
4820 _bz_Equal<P_numtype1, P_numtype2> > T_expr;
4821
4822 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4823 d2._bz_getRef()));
4824}
4825
4826// Matrix<P_numtype1, P_struct1> == _bz_MatExpr<P_expr2>
4827template<class P_numtype1, class P_struct1, class P_expr2>
4828inline
4829_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4830 _bz_MatExpr<P_expr2>, _bz_Equal<P_numtype1, _bz_typename P_expr2::T_numtype> > >
4831operator==(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
4832{
4833 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4834 _bz_MatExpr<P_expr2>,
4835 _bz_Equal<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
4836
4837 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4838 d2));
4839}
4840
4841// Matrix<P_numtype1, P_struct1> == int
4842template<class P_numtype1, class P_struct1>
4843inline
4844_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4845 _bz_MatExprConstant<int>, _bz_Equal<P_numtype1, int> > >
4846operator==(const Matrix<P_numtype1, P_struct1>& d1, int d2)
4847{
4848 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4849 _bz_MatExprConstant<int>,
4850 _bz_Equal<P_numtype1, int> > T_expr;
4851
4852 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4853 _bz_MatExprConstant<int>(d2)));
4854}
4855
4856// Matrix<P_numtype1, P_struct1> == float
4857template<class P_numtype1, class P_struct1>
4858inline
4859_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4860 _bz_MatExprConstant<float>, _bz_Equal<P_numtype1, float> > >
4861operator==(const Matrix<P_numtype1, P_struct1>& d1, float d2)
4862{
4863 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4864 _bz_MatExprConstant<float>,
4865 _bz_Equal<P_numtype1, float> > T_expr;
4866
4867 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4868 _bz_MatExprConstant<float>(d2)));
4869}
4870
4871// Matrix<P_numtype1, P_struct1> == double
4872template<class P_numtype1, class P_struct1>
4873inline
4874_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4875 _bz_MatExprConstant<double>, _bz_Equal<P_numtype1, double> > >
4876operator==(const Matrix<P_numtype1, P_struct1>& d1, double d2)
4877{
4878 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4879 _bz_MatExprConstant<double>,
4880 _bz_Equal<P_numtype1, double> > T_expr;
4881
4882 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4883 _bz_MatExprConstant<double>(d2)));
4884}
4885
4886// Matrix<P_numtype1, P_struct1> == long double
4887template<class P_numtype1, class P_struct1>
4888inline
4889_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4890 _bz_MatExprConstant<long double>, _bz_Equal<P_numtype1, long double> > >
4891operator==(const Matrix<P_numtype1, P_struct1>& d1, long double d2)
4892{
4893 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4894 _bz_MatExprConstant<long double>,
4895 _bz_Equal<P_numtype1, long double> > T_expr;
4896
4897 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4898 _bz_MatExprConstant<long double>(d2)));
4899}
4900
4901#ifdef BZ_HAVE_COMPLEX
4902// Matrix<P_numtype1, P_struct1> == complex<float>
4903template<class P_numtype1, class P_struct1>
4904inline
4905_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4906 _bz_MatExprConstant<complex<float> >, _bz_Equal<P_numtype1, complex<float> > > >
4907operator==(const Matrix<P_numtype1, P_struct1>& d1, complex<float> d2)
4908{
4909 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4910 _bz_MatExprConstant<complex<float> >,
4911 _bz_Equal<P_numtype1, complex<float> > > T_expr;
4912
4913 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4914 _bz_MatExprConstant<complex<float> >(d2)));
4915}
4916#endif // BZ_HAVE_COMPLEX
4917
4918#ifdef BZ_HAVE_COMPLEX
4919// Matrix<P_numtype1, P_struct1> == complex<double>
4920template<class P_numtype1, class P_struct1>
4921inline
4922_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4923 _bz_MatExprConstant<complex<double> >, _bz_Equal<P_numtype1, complex<double> > > >
4924operator==(const Matrix<P_numtype1, P_struct1>& d1, complex<double> d2)
4925{
4926 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4927 _bz_MatExprConstant<complex<double> >,
4928 _bz_Equal<P_numtype1, complex<double> > > T_expr;
4929
4930 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4931 _bz_MatExprConstant<complex<double> >(d2)));
4932}
4933#endif // BZ_HAVE_COMPLEX
4934
4935#ifdef BZ_HAVE_COMPLEX
4936// Matrix<P_numtype1, P_struct1> == complex<long double>
4937template<class P_numtype1, class P_struct1>
4938inline
4939_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4940 _bz_MatExprConstant<complex<long double> >, _bz_Equal<P_numtype1, complex<long double> > > >
4941operator==(const Matrix<P_numtype1, P_struct1>& d1, complex<long double> d2)
4942{
4943 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
4944 _bz_MatExprConstant<complex<long double> >,
4945 _bz_Equal<P_numtype1, complex<long double> > > T_expr;
4946
4947 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
4948 _bz_MatExprConstant<complex<long double> >(d2)));
4949}
4950#endif // BZ_HAVE_COMPLEX
4951
4952// _bz_MatExpr<P_expr1> == Matrix<P_numtype2, P_struct2>
4953template<class P_expr1, class P_numtype2, class P_struct2>
4954inline
4955_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4956 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Equal<_bz_typename P_expr1::T_numtype, P_numtype2> > >
4957operator==(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
4958{
4959 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4960 _bz_MatrixRef<P_numtype2, P_struct2>,
4961 _bz_Equal<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
4962
4963 return _bz_MatExpr<T_expr>(T_expr(d1,
4964 d2._bz_getRef()));
4965}
4966
4967// _bz_MatExpr<P_expr1> == _bz_MatExpr<P_expr2>
4968template<class P_expr1, class P_expr2>
4969inline
4970_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4971 _bz_MatExpr<P_expr2>, _bz_Equal<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
4972operator==(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
4973{
4974 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4975 _bz_MatExpr<P_expr2>,
4976 _bz_Equal<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
4977
4978 return _bz_MatExpr<T_expr>(T_expr(d1,
4979 d2));
4980}
4981
4982// _bz_MatExpr<P_expr1> == int
4983template<class P_expr1>
4984inline
4985_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
4986 _bz_MatExprConstant<int>, _bz_Equal<_bz_typename P_expr1::T_numtype, int> > >
4987operator==(_bz_MatExpr<P_expr1> d1, int d2)
4988{
4989 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
4990 _bz_MatExprConstant<int>,
4991 _bz_Equal<_bz_typename P_expr1::T_numtype, int> > T_expr;
4992
4993 return _bz_MatExpr<T_expr>(T_expr(d1,
4994 _bz_MatExprConstant<int>(d2)));
4995}
4996
4997// _bz_MatExpr<P_expr1> == float
4998template<class P_expr1>
4999inline
5000_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5001 _bz_MatExprConstant<float>, _bz_Equal<_bz_typename P_expr1::T_numtype, float> > >
5002operator==(_bz_MatExpr<P_expr1> d1, float d2)
5003{
5004 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5005 _bz_MatExprConstant<float>,
5006 _bz_Equal<_bz_typename P_expr1::T_numtype, float> > T_expr;
5007
5008 return _bz_MatExpr<T_expr>(T_expr(d1,
5009 _bz_MatExprConstant<float>(d2)));
5010}
5011
5012// _bz_MatExpr<P_expr1> == double
5013template<class P_expr1>
5014inline
5015_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5016 _bz_MatExprConstant<double>, _bz_Equal<_bz_typename P_expr1::T_numtype, double> > >
5017operator==(_bz_MatExpr<P_expr1> d1, double d2)
5018{
5019 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5020 _bz_MatExprConstant<double>,
5021 _bz_Equal<_bz_typename P_expr1::T_numtype, double> > T_expr;
5022
5023 return _bz_MatExpr<T_expr>(T_expr(d1,
5024 _bz_MatExprConstant<double>(d2)));
5025}
5026
5027// _bz_MatExpr<P_expr1> == long double
5028template<class P_expr1>
5029inline
5030_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5031 _bz_MatExprConstant<long double>, _bz_Equal<_bz_typename P_expr1::T_numtype, long double> > >
5032operator==(_bz_MatExpr<P_expr1> d1, long double d2)
5033{
5034 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5035 _bz_MatExprConstant<long double>,
5036 _bz_Equal<_bz_typename P_expr1::T_numtype, long double> > T_expr;
5037
5038 return _bz_MatExpr<T_expr>(T_expr(d1,
5039 _bz_MatExprConstant<long double>(d2)));
5040}
5041
5042#ifdef BZ_HAVE_COMPLEX
5043// _bz_MatExpr<P_expr1> == complex<float>
5044template<class P_expr1>
5045inline
5046_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5047 _bz_MatExprConstant<complex<float> >, _bz_Equal<_bz_typename P_expr1::T_numtype, complex<float> > > >
5048operator==(_bz_MatExpr<P_expr1> d1, complex<float> d2)
5049{
5050 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5051 _bz_MatExprConstant<complex<float> >,
5052 _bz_Equal<_bz_typename P_expr1::T_numtype, complex<float> > > T_expr;
5053
5054 return _bz_MatExpr<T_expr>(T_expr(d1,
5055 _bz_MatExprConstant<complex<float> >(d2)));
5056}
5057#endif // BZ_HAVE_COMPLEX
5058
5059#ifdef BZ_HAVE_COMPLEX
5060// _bz_MatExpr<P_expr1> == complex<double>
5061template<class P_expr1>
5062inline
5063_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5064 _bz_MatExprConstant<complex<double> >, _bz_Equal<_bz_typename P_expr1::T_numtype, complex<double> > > >
5065operator==(_bz_MatExpr<P_expr1> d1, complex<double> d2)
5066{
5067 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5068 _bz_MatExprConstant<complex<double> >,
5069 _bz_Equal<_bz_typename P_expr1::T_numtype, complex<double> > > T_expr;
5070
5071 return _bz_MatExpr<T_expr>(T_expr(d1,
5072 _bz_MatExprConstant<complex<double> >(d2)));
5073}
5074#endif // BZ_HAVE_COMPLEX
5075
5076#ifdef BZ_HAVE_COMPLEX
5077// _bz_MatExpr<P_expr1> == complex<long double>
5078template<class P_expr1>
5079inline
5080_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5081 _bz_MatExprConstant<complex<long double> >, _bz_Equal<_bz_typename P_expr1::T_numtype, complex<long double> > > >
5082operator==(_bz_MatExpr<P_expr1> d1, complex<long double> d2)
5083{
5084 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5085 _bz_MatExprConstant<complex<long double> >,
5086 _bz_Equal<_bz_typename P_expr1::T_numtype, complex<long double> > > T_expr;
5087
5088 return _bz_MatExpr<T_expr>(T_expr(d1,
5089 _bz_MatExprConstant<complex<long double> >(d2)));
5090}
5091#endif // BZ_HAVE_COMPLEX
5092
5093// int == Matrix<P_numtype2, P_struct2>
5094template<class P_numtype2, class P_struct2>
5095inline
5096_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
5097 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Equal<int, P_numtype2> > >
5098operator==(int d1, const Matrix<P_numtype2, P_struct2>& d2)
5099{
5100 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
5101 _bz_MatrixRef<P_numtype2, P_struct2>,
5102 _bz_Equal<int, P_numtype2> > T_expr;
5103
5104 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
5105 d2._bz_getRef()));
5106}
5107
5108// int == _bz_MatExpr<P_expr2>
5109template<class P_expr2>
5110inline
5111_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
5112 _bz_MatExpr<P_expr2>, _bz_Equal<int, _bz_typename P_expr2::T_numtype> > >
5113operator==(int d1, _bz_MatExpr<P_expr2> d2)
5114{
5115 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
5116 _bz_MatExpr<P_expr2>,
5117 _bz_Equal<int, _bz_typename P_expr2::T_numtype> > T_expr;
5118
5119 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
5120 d2));
5121}
5122
5123// float == Matrix<P_numtype2, P_struct2>
5124template<class P_numtype2, class P_struct2>
5125inline
5126_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
5127 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Equal<float, P_numtype2> > >
5128operator==(float d1, const Matrix<P_numtype2, P_struct2>& d2)
5129{
5130 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
5131 _bz_MatrixRef<P_numtype2, P_struct2>,
5132 _bz_Equal<float, P_numtype2> > T_expr;
5133
5134 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
5135 d2._bz_getRef()));
5136}
5137
5138// float == _bz_MatExpr<P_expr2>
5139template<class P_expr2>
5140inline
5141_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
5142 _bz_MatExpr<P_expr2>, _bz_Equal<float, _bz_typename P_expr2::T_numtype> > >
5143operator==(float d1, _bz_MatExpr<P_expr2> d2)
5144{
5145 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
5146 _bz_MatExpr<P_expr2>,
5147 _bz_Equal<float, _bz_typename P_expr2::T_numtype> > T_expr;
5148
5149 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
5150 d2));
5151}
5152
5153// double == Matrix<P_numtype2, P_struct2>
5154template<class P_numtype2, class P_struct2>
5155inline
5156_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
5157 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Equal<double, P_numtype2> > >
5158operator==(double d1, const Matrix<P_numtype2, P_struct2>& d2)
5159{
5160 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
5161 _bz_MatrixRef<P_numtype2, P_struct2>,
5162 _bz_Equal<double, P_numtype2> > T_expr;
5163
5164 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
5165 d2._bz_getRef()));
5166}
5167
5168// double == _bz_MatExpr<P_expr2>
5169template<class P_expr2>
5170inline
5171_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
5172 _bz_MatExpr<P_expr2>, _bz_Equal<double, _bz_typename P_expr2::T_numtype> > >
5173operator==(double d1, _bz_MatExpr<P_expr2> d2)
5174{
5175 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
5176 _bz_MatExpr<P_expr2>,
5177 _bz_Equal<double, _bz_typename P_expr2::T_numtype> > T_expr;
5178
5179 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
5180 d2));
5181}
5182
5183// long double == Matrix<P_numtype2, P_struct2>
5184template<class P_numtype2, class P_struct2>
5185inline
5186_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
5187 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Equal<long double, P_numtype2> > >
5188operator==(long double d1, const Matrix<P_numtype2, P_struct2>& d2)
5189{
5190 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
5191 _bz_MatrixRef<P_numtype2, P_struct2>,
5192 _bz_Equal<long double, P_numtype2> > T_expr;
5193
5194 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
5195 d2._bz_getRef()));
5196}
5197
5198// long double == _bz_MatExpr<P_expr2>
5199template<class P_expr2>
5200inline
5201_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
5202 _bz_MatExpr<P_expr2>, _bz_Equal<long double, _bz_typename P_expr2::T_numtype> > >
5203operator==(long double d1, _bz_MatExpr<P_expr2> d2)
5204{
5205 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
5206 _bz_MatExpr<P_expr2>,
5207 _bz_Equal<long double, _bz_typename P_expr2::T_numtype> > T_expr;
5208
5209 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
5210 d2));
5211}
5212
5213#ifdef BZ_HAVE_COMPLEX
5214// complex<float> == Matrix<P_numtype2, P_struct2>
5215template<class P_numtype2, class P_struct2>
5216inline
5217_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
5218 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Equal<complex<float> , P_numtype2> > >
5219operator==(complex<float> d1, const Matrix<P_numtype2, P_struct2>& d2)
5220{
5221 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
5222 _bz_MatrixRef<P_numtype2, P_struct2>,
5223 _bz_Equal<complex<float> , P_numtype2> > T_expr;
5224
5225 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
5226 d2._bz_getRef()));
5227}
5228#endif // BZ_HAVE_COMPLEX
5229
5230#ifdef BZ_HAVE_COMPLEX
5231// complex<float> == _bz_MatExpr<P_expr2>
5232template<class P_expr2>
5233inline
5234_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
5235 _bz_MatExpr<P_expr2>, _bz_Equal<complex<float> , _bz_typename P_expr2::T_numtype> > >
5236operator==(complex<float> d1, _bz_MatExpr<P_expr2> d2)
5237{
5238 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
5239 _bz_MatExpr<P_expr2>,
5240 _bz_Equal<complex<float> , _bz_typename P_expr2::T_numtype> > T_expr;
5241
5242 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
5243 d2));
5244}
5245#endif // BZ_HAVE_COMPLEX
5246
5247#ifdef BZ_HAVE_COMPLEX
5248// complex<double> == Matrix<P_numtype2, P_struct2>
5249template<class P_numtype2, class P_struct2>
5250inline
5251_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
5252 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Equal<complex<double> , P_numtype2> > >
5253operator==(complex<double> d1, const Matrix<P_numtype2, P_struct2>& d2)
5254{
5255 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
5256 _bz_MatrixRef<P_numtype2, P_struct2>,
5257 _bz_Equal<complex<double> , P_numtype2> > T_expr;
5258
5259 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
5260 d2._bz_getRef()));
5261}
5262#endif // BZ_HAVE_COMPLEX
5263
5264#ifdef BZ_HAVE_COMPLEX
5265// complex<double> == _bz_MatExpr<P_expr2>
5266template<class P_expr2>
5267inline
5268_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
5269 _bz_MatExpr<P_expr2>, _bz_Equal<complex<double> , _bz_typename P_expr2::T_numtype> > >
5270operator==(complex<double> d1, _bz_MatExpr<P_expr2> d2)
5271{
5272 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
5273 _bz_MatExpr<P_expr2>,
5274 _bz_Equal<complex<double> , _bz_typename P_expr2::T_numtype> > T_expr;
5275
5276 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
5277 d2));
5278}
5279#endif // BZ_HAVE_COMPLEX
5280
5281#ifdef BZ_HAVE_COMPLEX
5282// complex<long double> == Matrix<P_numtype2, P_struct2>
5283template<class P_numtype2, class P_struct2>
5284inline
5285_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
5286 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_Equal<complex<long double> , P_numtype2> > >
5287operator==(complex<long double> d1, const Matrix<P_numtype2, P_struct2>& d2)
5288{
5289 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
5290 _bz_MatrixRef<P_numtype2, P_struct2>,
5291 _bz_Equal<complex<long double> , P_numtype2> > T_expr;
5292
5293 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
5294 d2._bz_getRef()));
5295}
5296#endif // BZ_HAVE_COMPLEX
5297
5298#ifdef BZ_HAVE_COMPLEX
5299// complex<long double> == _bz_MatExpr<P_expr2>
5300template<class P_expr2>
5301inline
5302_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
5303 _bz_MatExpr<P_expr2>, _bz_Equal<complex<long double> , _bz_typename P_expr2::T_numtype> > >
5304operator==(complex<long double> d1, _bz_MatExpr<P_expr2> d2)
5305{
5306 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
5307 _bz_MatExpr<P_expr2>,
5308 _bz_Equal<complex<long double> , _bz_typename P_expr2::T_numtype> > T_expr;
5309
5310 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
5311 d2));
5312}
5313#endif // BZ_HAVE_COMPLEX
5314/****************************************************************************
5315 * Not-equal operators
5316 ****************************************************************************/
5317
5318// Matrix<P_numtype1, P_struct1> != Matrix<P_numtype2, P_struct2>
5319template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
5320inline
5321_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5322 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_NotEqual<P_numtype1, P_numtype2> > >
5323operator!=(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
5324{
5325 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5326 _bz_MatrixRef<P_numtype2, P_struct2>,
5327 _bz_NotEqual<P_numtype1, P_numtype2> > T_expr;
5328
5329 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5330 d2._bz_getRef()));
5331}
5332
5333// Matrix<P_numtype1, P_struct1> != _bz_MatExpr<P_expr2>
5334template<class P_numtype1, class P_struct1, class P_expr2>
5335inline
5336_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5337 _bz_MatExpr<P_expr2>, _bz_NotEqual<P_numtype1, _bz_typename P_expr2::T_numtype> > >
5338operator!=(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
5339{
5340 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5341 _bz_MatExpr<P_expr2>,
5342 _bz_NotEqual<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
5343
5344 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5345 d2));
5346}
5347
5348// Matrix<P_numtype1, P_struct1> != int
5349template<class P_numtype1, class P_struct1>
5350inline
5351_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5352 _bz_MatExprConstant<int>, _bz_NotEqual<P_numtype1, int> > >
5353operator!=(const Matrix<P_numtype1, P_struct1>& d1, int d2)
5354{
5355 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5356 _bz_MatExprConstant<int>,
5357 _bz_NotEqual<P_numtype1, int> > T_expr;
5358
5359 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5360 _bz_MatExprConstant<int>(d2)));
5361}
5362
5363// Matrix<P_numtype1, P_struct1> != float
5364template<class P_numtype1, class P_struct1>
5365inline
5366_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5367 _bz_MatExprConstant<float>, _bz_NotEqual<P_numtype1, float> > >
5368operator!=(const Matrix<P_numtype1, P_struct1>& d1, float d2)
5369{
5370 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5371 _bz_MatExprConstant<float>,
5372 _bz_NotEqual<P_numtype1, float> > T_expr;
5373
5374 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5375 _bz_MatExprConstant<float>(d2)));
5376}
5377
5378// Matrix<P_numtype1, P_struct1> != double
5379template<class P_numtype1, class P_struct1>
5380inline
5381_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5382 _bz_MatExprConstant<double>, _bz_NotEqual<P_numtype1, double> > >
5383operator!=(const Matrix<P_numtype1, P_struct1>& d1, double d2)
5384{
5385 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5386 _bz_MatExprConstant<double>,
5387 _bz_NotEqual<P_numtype1, double> > T_expr;
5388
5389 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5390 _bz_MatExprConstant<double>(d2)));
5391}
5392
5393// Matrix<P_numtype1, P_struct1> != long double
5394template<class P_numtype1, class P_struct1>
5395inline
5396_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5397 _bz_MatExprConstant<long double>, _bz_NotEqual<P_numtype1, long double> > >
5398operator!=(const Matrix<P_numtype1, P_struct1>& d1, long double d2)
5399{
5400 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5401 _bz_MatExprConstant<long double>,
5402 _bz_NotEqual<P_numtype1, long double> > T_expr;
5403
5404 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5405 _bz_MatExprConstant<long double>(d2)));
5406}
5407
5408#ifdef BZ_HAVE_COMPLEX
5409// Matrix<P_numtype1, P_struct1> != complex<float>
5410template<class P_numtype1, class P_struct1>
5411inline
5412_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5413 _bz_MatExprConstant<complex<float> >, _bz_NotEqual<P_numtype1, complex<float> > > >
5414operator!=(const Matrix<P_numtype1, P_struct1>& d1, complex<float> d2)
5415{
5416 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5417 _bz_MatExprConstant<complex<float> >,
5418 _bz_NotEqual<P_numtype1, complex<float> > > T_expr;
5419
5420 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5421 _bz_MatExprConstant<complex<float> >(d2)));
5422}
5423#endif // BZ_HAVE_COMPLEX
5424
5425#ifdef BZ_HAVE_COMPLEX
5426// Matrix<P_numtype1, P_struct1> != complex<double>
5427template<class P_numtype1, class P_struct1>
5428inline
5429_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5430 _bz_MatExprConstant<complex<double> >, _bz_NotEqual<P_numtype1, complex<double> > > >
5431operator!=(const Matrix<P_numtype1, P_struct1>& d1, complex<double> d2)
5432{
5433 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5434 _bz_MatExprConstant<complex<double> >,
5435 _bz_NotEqual<P_numtype1, complex<double> > > T_expr;
5436
5437 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5438 _bz_MatExprConstant<complex<double> >(d2)));
5439}
5440#endif // BZ_HAVE_COMPLEX
5441
5442#ifdef BZ_HAVE_COMPLEX
5443// Matrix<P_numtype1, P_struct1> != complex<long double>
5444template<class P_numtype1, class P_struct1>
5445inline
5446_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5447 _bz_MatExprConstant<complex<long double> >, _bz_NotEqual<P_numtype1, complex<long double> > > >
5448operator!=(const Matrix<P_numtype1, P_struct1>& d1, complex<long double> d2)
5449{
5450 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5451 _bz_MatExprConstant<complex<long double> >,
5452 _bz_NotEqual<P_numtype1, complex<long double> > > T_expr;
5453
5454 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5455 _bz_MatExprConstant<complex<long double> >(d2)));
5456}
5457#endif // BZ_HAVE_COMPLEX
5458
5459// _bz_MatExpr<P_expr1> != Matrix<P_numtype2, P_struct2>
5460template<class P_expr1, class P_numtype2, class P_struct2>
5461inline
5462_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5463 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_NotEqual<_bz_typename P_expr1::T_numtype, P_numtype2> > >
5464operator!=(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
5465{
5466 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5467 _bz_MatrixRef<P_numtype2, P_struct2>,
5468 _bz_NotEqual<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
5469
5470 return _bz_MatExpr<T_expr>(T_expr(d1,
5471 d2._bz_getRef()));
5472}
5473
5474// _bz_MatExpr<P_expr1> != _bz_MatExpr<P_expr2>
5475template<class P_expr1, class P_expr2>
5476inline
5477_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5478 _bz_MatExpr<P_expr2>, _bz_NotEqual<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
5479operator!=(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
5480{
5481 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5482 _bz_MatExpr<P_expr2>,
5483 _bz_NotEqual<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
5484
5485 return _bz_MatExpr<T_expr>(T_expr(d1,
5486 d2));
5487}
5488
5489// _bz_MatExpr<P_expr1> != int
5490template<class P_expr1>
5491inline
5492_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5493 _bz_MatExprConstant<int>, _bz_NotEqual<_bz_typename P_expr1::T_numtype, int> > >
5494operator!=(_bz_MatExpr<P_expr1> d1, int d2)
5495{
5496 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5497 _bz_MatExprConstant<int>,
5498 _bz_NotEqual<_bz_typename P_expr1::T_numtype, int> > T_expr;
5499
5500 return _bz_MatExpr<T_expr>(T_expr(d1,
5501 _bz_MatExprConstant<int>(d2)));
5502}
5503
5504// _bz_MatExpr<P_expr1> != float
5505template<class P_expr1>
5506inline
5507_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5508 _bz_MatExprConstant<float>, _bz_NotEqual<_bz_typename P_expr1::T_numtype, float> > >
5509operator!=(_bz_MatExpr<P_expr1> d1, float d2)
5510{
5511 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5512 _bz_MatExprConstant<float>,
5513 _bz_NotEqual<_bz_typename P_expr1::T_numtype, float> > T_expr;
5514
5515 return _bz_MatExpr<T_expr>(T_expr(d1,
5516 _bz_MatExprConstant<float>(d2)));
5517}
5518
5519// _bz_MatExpr<P_expr1> != double
5520template<class P_expr1>
5521inline
5522_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5523 _bz_MatExprConstant<double>, _bz_NotEqual<_bz_typename P_expr1::T_numtype, double> > >
5524operator!=(_bz_MatExpr<P_expr1> d1, double d2)
5525{
5526 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5527 _bz_MatExprConstant<double>,
5528 _bz_NotEqual<_bz_typename P_expr1::T_numtype, double> > T_expr;
5529
5530 return _bz_MatExpr<T_expr>(T_expr(d1,
5531 _bz_MatExprConstant<double>(d2)));
5532}
5533
5534// _bz_MatExpr<P_expr1> != long double
5535template<class P_expr1>
5536inline
5537_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5538 _bz_MatExprConstant<long double>, _bz_NotEqual<_bz_typename P_expr1::T_numtype, long double> > >
5539operator!=(_bz_MatExpr<P_expr1> d1, long double d2)
5540{
5541 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5542 _bz_MatExprConstant<long double>,
5543 _bz_NotEqual<_bz_typename P_expr1::T_numtype, long double> > T_expr;
5544
5545 return _bz_MatExpr<T_expr>(T_expr(d1,
5546 _bz_MatExprConstant<long double>(d2)));
5547}
5548
5549#ifdef BZ_HAVE_COMPLEX
5550// _bz_MatExpr<P_expr1> != complex<float>
5551template<class P_expr1>
5552inline
5553_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5554 _bz_MatExprConstant<complex<float> >, _bz_NotEqual<_bz_typename P_expr1::T_numtype, complex<float> > > >
5555operator!=(_bz_MatExpr<P_expr1> d1, complex<float> d2)
5556{
5557 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5558 _bz_MatExprConstant<complex<float> >,
5559 _bz_NotEqual<_bz_typename P_expr1::T_numtype, complex<float> > > T_expr;
5560
5561 return _bz_MatExpr<T_expr>(T_expr(d1,
5562 _bz_MatExprConstant<complex<float> >(d2)));
5563}
5564#endif // BZ_HAVE_COMPLEX
5565
5566#ifdef BZ_HAVE_COMPLEX
5567// _bz_MatExpr<P_expr1> != complex<double>
5568template<class P_expr1>
5569inline
5570_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5571 _bz_MatExprConstant<complex<double> >, _bz_NotEqual<_bz_typename P_expr1::T_numtype, complex<double> > > >
5572operator!=(_bz_MatExpr<P_expr1> d1, complex<double> d2)
5573{
5574 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5575 _bz_MatExprConstant<complex<double> >,
5576 _bz_NotEqual<_bz_typename P_expr1::T_numtype, complex<double> > > T_expr;
5577
5578 return _bz_MatExpr<T_expr>(T_expr(d1,
5579 _bz_MatExprConstant<complex<double> >(d2)));
5580}
5581#endif // BZ_HAVE_COMPLEX
5582
5583#ifdef BZ_HAVE_COMPLEX
5584// _bz_MatExpr<P_expr1> != complex<long double>
5585template<class P_expr1>
5586inline
5587_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5588 _bz_MatExprConstant<complex<long double> >, _bz_NotEqual<_bz_typename P_expr1::T_numtype, complex<long double> > > >
5589operator!=(_bz_MatExpr<P_expr1> d1, complex<long double> d2)
5590{
5591 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5592 _bz_MatExprConstant<complex<long double> >,
5593 _bz_NotEqual<_bz_typename P_expr1::T_numtype, complex<long double> > > T_expr;
5594
5595 return _bz_MatExpr<T_expr>(T_expr(d1,
5596 _bz_MatExprConstant<complex<long double> >(d2)));
5597}
5598#endif // BZ_HAVE_COMPLEX
5599
5600// int != Matrix<P_numtype2, P_struct2>
5601template<class P_numtype2, class P_struct2>
5602inline
5603_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
5604 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_NotEqual<int, P_numtype2> > >
5605operator!=(int d1, const Matrix<P_numtype2, P_struct2>& d2)
5606{
5607 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
5608 _bz_MatrixRef<P_numtype2, P_struct2>,
5609 _bz_NotEqual<int, P_numtype2> > T_expr;
5610
5611 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
5612 d2._bz_getRef()));
5613}
5614
5615// int != _bz_MatExpr<P_expr2>
5616template<class P_expr2>
5617inline
5618_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
5619 _bz_MatExpr<P_expr2>, _bz_NotEqual<int, _bz_typename P_expr2::T_numtype> > >
5620operator!=(int d1, _bz_MatExpr<P_expr2> d2)
5621{
5622 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
5623 _bz_MatExpr<P_expr2>,
5624 _bz_NotEqual<int, _bz_typename P_expr2::T_numtype> > T_expr;
5625
5626 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
5627 d2));
5628}
5629
5630// float != Matrix<P_numtype2, P_struct2>
5631template<class P_numtype2, class P_struct2>
5632inline
5633_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
5634 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_NotEqual<float, P_numtype2> > >
5635operator!=(float d1, const Matrix<P_numtype2, P_struct2>& d2)
5636{
5637 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
5638 _bz_MatrixRef<P_numtype2, P_struct2>,
5639 _bz_NotEqual<float, P_numtype2> > T_expr;
5640
5641 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
5642 d2._bz_getRef()));
5643}
5644
5645// float != _bz_MatExpr<P_expr2>
5646template<class P_expr2>
5647inline
5648_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<float>,
5649 _bz_MatExpr<P_expr2>, _bz_NotEqual<float, _bz_typename P_expr2::T_numtype> > >
5650operator!=(float d1, _bz_MatExpr<P_expr2> d2)
5651{
5652 typedef _bz_MatExprOp<_bz_MatExprConstant<float>,
5653 _bz_MatExpr<P_expr2>,
5654 _bz_NotEqual<float, _bz_typename P_expr2::T_numtype> > T_expr;
5655
5656 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<float>(d1),
5657 d2));
5658}
5659
5660// double != Matrix<P_numtype2, P_struct2>
5661template<class P_numtype2, class P_struct2>
5662inline
5663_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
5664 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_NotEqual<double, P_numtype2> > >
5665operator!=(double d1, const Matrix<P_numtype2, P_struct2>& d2)
5666{
5667 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
5668 _bz_MatrixRef<P_numtype2, P_struct2>,
5669 _bz_NotEqual<double, P_numtype2> > T_expr;
5670
5671 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
5672 d2._bz_getRef()));
5673}
5674
5675// double != _bz_MatExpr<P_expr2>
5676template<class P_expr2>
5677inline
5678_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<double>,
5679 _bz_MatExpr<P_expr2>, _bz_NotEqual<double, _bz_typename P_expr2::T_numtype> > >
5680operator!=(double d1, _bz_MatExpr<P_expr2> d2)
5681{
5682 typedef _bz_MatExprOp<_bz_MatExprConstant<double>,
5683 _bz_MatExpr<P_expr2>,
5684 _bz_NotEqual<double, _bz_typename P_expr2::T_numtype> > T_expr;
5685
5686 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<double>(d1),
5687 d2));
5688}
5689
5690// long double != Matrix<P_numtype2, P_struct2>
5691template<class P_numtype2, class P_struct2>
5692inline
5693_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
5694 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_NotEqual<long double, P_numtype2> > >
5695operator!=(long double d1, const Matrix<P_numtype2, P_struct2>& d2)
5696{
5697 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
5698 _bz_MatrixRef<P_numtype2, P_struct2>,
5699 _bz_NotEqual<long double, P_numtype2> > T_expr;
5700
5701 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
5702 d2._bz_getRef()));
5703}
5704
5705// long double != _bz_MatExpr<P_expr2>
5706template<class P_expr2>
5707inline
5708_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<long double>,
5709 _bz_MatExpr<P_expr2>, _bz_NotEqual<long double, _bz_typename P_expr2::T_numtype> > >
5710operator!=(long double d1, _bz_MatExpr<P_expr2> d2)
5711{
5712 typedef _bz_MatExprOp<_bz_MatExprConstant<long double>,
5713 _bz_MatExpr<P_expr2>,
5714 _bz_NotEqual<long double, _bz_typename P_expr2::T_numtype> > T_expr;
5715
5716 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<long double>(d1),
5717 d2));
5718}
5719
5720#ifdef BZ_HAVE_COMPLEX
5721// complex<float> != Matrix<P_numtype2, P_struct2>
5722template<class P_numtype2, class P_struct2>
5723inline
5724_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
5725 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_NotEqual<complex<float> , P_numtype2> > >
5726operator!=(complex<float> d1, const Matrix<P_numtype2, P_struct2>& d2)
5727{
5728 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
5729 _bz_MatrixRef<P_numtype2, P_struct2>,
5730 _bz_NotEqual<complex<float> , P_numtype2> > T_expr;
5731
5732 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
5733 d2._bz_getRef()));
5734}
5735#endif // BZ_HAVE_COMPLEX
5736
5737#ifdef BZ_HAVE_COMPLEX
5738// complex<float> != _bz_MatExpr<P_expr2>
5739template<class P_expr2>
5740inline
5741_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
5742 _bz_MatExpr<P_expr2>, _bz_NotEqual<complex<float> , _bz_typename P_expr2::T_numtype> > >
5743operator!=(complex<float> d1, _bz_MatExpr<P_expr2> d2)
5744{
5745 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<float> >,
5746 _bz_MatExpr<P_expr2>,
5747 _bz_NotEqual<complex<float> , _bz_typename P_expr2::T_numtype> > T_expr;
5748
5749 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<float> >(d1),
5750 d2));
5751}
5752#endif // BZ_HAVE_COMPLEX
5753
5754#ifdef BZ_HAVE_COMPLEX
5755// complex<double> != Matrix<P_numtype2, P_struct2>
5756template<class P_numtype2, class P_struct2>
5757inline
5758_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
5759 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_NotEqual<complex<double> , P_numtype2> > >
5760operator!=(complex<double> d1, const Matrix<P_numtype2, P_struct2>& d2)
5761{
5762 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
5763 _bz_MatrixRef<P_numtype2, P_struct2>,
5764 _bz_NotEqual<complex<double> , P_numtype2> > T_expr;
5765
5766 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
5767 d2._bz_getRef()));
5768}
5769#endif // BZ_HAVE_COMPLEX
5770
5771#ifdef BZ_HAVE_COMPLEX
5772// complex<double> != _bz_MatExpr<P_expr2>
5773template<class P_expr2>
5774inline
5775_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
5776 _bz_MatExpr<P_expr2>, _bz_NotEqual<complex<double> , _bz_typename P_expr2::T_numtype> > >
5777operator!=(complex<double> d1, _bz_MatExpr<P_expr2> d2)
5778{
5779 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<double> >,
5780 _bz_MatExpr<P_expr2>,
5781 _bz_NotEqual<complex<double> , _bz_typename P_expr2::T_numtype> > T_expr;
5782
5783 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<double> >(d1),
5784 d2));
5785}
5786#endif // BZ_HAVE_COMPLEX
5787
5788#ifdef BZ_HAVE_COMPLEX
5789// complex<long double> != Matrix<P_numtype2, P_struct2>
5790template<class P_numtype2, class P_struct2>
5791inline
5792_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
5793 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_NotEqual<complex<long double> , P_numtype2> > >
5794operator!=(complex<long double> d1, const Matrix<P_numtype2, P_struct2>& d2)
5795{
5796 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
5797 _bz_MatrixRef<P_numtype2, P_struct2>,
5798 _bz_NotEqual<complex<long double> , P_numtype2> > T_expr;
5799
5800 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
5801 d2._bz_getRef()));
5802}
5803#endif // BZ_HAVE_COMPLEX
5804
5805#ifdef BZ_HAVE_COMPLEX
5806// complex<long double> != _bz_MatExpr<P_expr2>
5807template<class P_expr2>
5808inline
5809_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
5810 _bz_MatExpr<P_expr2>, _bz_NotEqual<complex<long double> , _bz_typename P_expr2::T_numtype> > >
5811operator!=(complex<long double> d1, _bz_MatExpr<P_expr2> d2)
5812{
5813 typedef _bz_MatExprOp<_bz_MatExprConstant<complex<long double> >,
5814 _bz_MatExpr<P_expr2>,
5815 _bz_NotEqual<complex<long double> , _bz_typename P_expr2::T_numtype> > T_expr;
5816
5817 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<complex<long double> >(d1),
5818 d2));
5819}
5820#endif // BZ_HAVE_COMPLEX
5821/****************************************************************************
5822 * Logical AND operators
5823 ****************************************************************************/
5824
5825// Matrix<P_numtype1, P_struct1> && Matrix<P_numtype2, P_struct2>
5826template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
5827inline
5828_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5829 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LogicalAnd<P_numtype1, P_numtype2> > >
5830operator&&(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
5831{
5832 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5833 _bz_MatrixRef<P_numtype2, P_struct2>,
5834 _bz_LogicalAnd<P_numtype1, P_numtype2> > T_expr;
5835
5836 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5837 d2._bz_getRef()));
5838}
5839
5840// Matrix<P_numtype1, P_struct1> && _bz_MatExpr<P_expr2>
5841template<class P_numtype1, class P_struct1, class P_expr2>
5842inline
5843_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5844 _bz_MatExpr<P_expr2>, _bz_LogicalAnd<P_numtype1, _bz_typename P_expr2::T_numtype> > >
5845operator&&(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
5846{
5847 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5848 _bz_MatExpr<P_expr2>,
5849 _bz_LogicalAnd<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
5850
5851 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5852 d2));
5853}
5854
5855// Matrix<P_numtype1, P_struct1> && int
5856template<class P_numtype1, class P_struct1>
5857inline
5858_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5859 _bz_MatExprConstant<int>, _bz_LogicalAnd<P_numtype1, int> > >
5860operator&&(const Matrix<P_numtype1, P_struct1>& d1, int d2)
5861{
5862 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5863 _bz_MatExprConstant<int>,
5864 _bz_LogicalAnd<P_numtype1, int> > T_expr;
5865
5866 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5867 _bz_MatExprConstant<int>(d2)));
5868}
5869
5870// _bz_MatExpr<P_expr1> && Matrix<P_numtype2, P_struct2>
5871template<class P_expr1, class P_numtype2, class P_struct2>
5872inline
5873_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5874 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LogicalAnd<_bz_typename P_expr1::T_numtype, P_numtype2> > >
5875operator&&(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
5876{
5877 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5878 _bz_MatrixRef<P_numtype2, P_struct2>,
5879 _bz_LogicalAnd<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
5880
5881 return _bz_MatExpr<T_expr>(T_expr(d1,
5882 d2._bz_getRef()));
5883}
5884
5885// _bz_MatExpr<P_expr1> && _bz_MatExpr<P_expr2>
5886template<class P_expr1, class P_expr2>
5887inline
5888_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5889 _bz_MatExpr<P_expr2>, _bz_LogicalAnd<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
5890operator&&(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
5891{
5892 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5893 _bz_MatExpr<P_expr2>,
5894 _bz_LogicalAnd<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
5895
5896 return _bz_MatExpr<T_expr>(T_expr(d1,
5897 d2));
5898}
5899
5900// _bz_MatExpr<P_expr1> && int
5901template<class P_expr1>
5902inline
5903_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5904 _bz_MatExprConstant<int>, _bz_LogicalAnd<_bz_typename P_expr1::T_numtype, int> > >
5905operator&&(_bz_MatExpr<P_expr1> d1, int d2)
5906{
5907 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
5908 _bz_MatExprConstant<int>,
5909 _bz_LogicalAnd<_bz_typename P_expr1::T_numtype, int> > T_expr;
5910
5911 return _bz_MatExpr<T_expr>(T_expr(d1,
5912 _bz_MatExprConstant<int>(d2)));
5913}
5914
5915// int && Matrix<P_numtype2, P_struct2>
5916template<class P_numtype2, class P_struct2>
5917inline
5918_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
5919 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LogicalAnd<int, P_numtype2> > >
5920operator&&(int d1, const Matrix<P_numtype2, P_struct2>& d2)
5921{
5922 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
5923 _bz_MatrixRef<P_numtype2, P_struct2>,
5924 _bz_LogicalAnd<int, P_numtype2> > T_expr;
5925
5926 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
5927 d2._bz_getRef()));
5928}
5929
5930// int && _bz_MatExpr<P_expr2>
5931template<class P_expr2>
5932inline
5933_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
5934 _bz_MatExpr<P_expr2>, _bz_LogicalAnd<int, _bz_typename P_expr2::T_numtype> > >
5935operator&&(int d1, _bz_MatExpr<P_expr2> d2)
5936{
5937 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
5938 _bz_MatExpr<P_expr2>,
5939 _bz_LogicalAnd<int, _bz_typename P_expr2::T_numtype> > T_expr;
5940
5941 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
5942 d2));
5943}
5944/****************************************************************************
5945 * Logical OR operators
5946 ****************************************************************************/
5947
5948// Matrix<P_numtype1, P_struct1> || Matrix<P_numtype2, P_struct2>
5949template<class P_numtype1, class P_struct1, class P_numtype2, class P_struct2>
5950inline
5951_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5952 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LogicalOr<P_numtype1, P_numtype2> > >
5953operator||(const Matrix<P_numtype1, P_struct1>& d1, const Matrix<P_numtype2, P_struct2>& d2)
5954{
5955 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5956 _bz_MatrixRef<P_numtype2, P_struct2>,
5957 _bz_LogicalOr<P_numtype1, P_numtype2> > T_expr;
5958
5959 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5960 d2._bz_getRef()));
5961}
5962
5963// Matrix<P_numtype1, P_struct1> || _bz_MatExpr<P_expr2>
5964template<class P_numtype1, class P_struct1, class P_expr2>
5965inline
5966_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5967 _bz_MatExpr<P_expr2>, _bz_LogicalOr<P_numtype1, _bz_typename P_expr2::T_numtype> > >
5968operator||(const Matrix<P_numtype1, P_struct1>& d1, _bz_MatExpr<P_expr2> d2)
5969{
5970 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5971 _bz_MatExpr<P_expr2>,
5972 _bz_LogicalOr<P_numtype1, _bz_typename P_expr2::T_numtype> > T_expr;
5973
5974 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5975 d2));
5976}
5977
5978// Matrix<P_numtype1, P_struct1> || int
5979template<class P_numtype1, class P_struct1>
5980inline
5981_bz_MatExpr<_bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5982 _bz_MatExprConstant<int>, _bz_LogicalOr<P_numtype1, int> > >
5983operator||(const Matrix<P_numtype1, P_struct1>& d1, int d2)
5984{
5985 typedef _bz_MatExprOp<_bz_MatrixRef<P_numtype1, P_struct1>,
5986 _bz_MatExprConstant<int>,
5987 _bz_LogicalOr<P_numtype1, int> > T_expr;
5988
5989 return _bz_MatExpr<T_expr>(T_expr(d1._bz_getRef(),
5990 _bz_MatExprConstant<int>(d2)));
5991}
5992
5993// _bz_MatExpr<P_expr1> || Matrix<P_numtype2, P_struct2>
5994template<class P_expr1, class P_numtype2, class P_struct2>
5995inline
5996_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
5997 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LogicalOr<_bz_typename P_expr1::T_numtype, P_numtype2> > >
5998operator||(_bz_MatExpr<P_expr1> d1, const Matrix<P_numtype2, P_struct2>& d2)
5999{
6000 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
6001 _bz_MatrixRef<P_numtype2, P_struct2>,
6002 _bz_LogicalOr<_bz_typename P_expr1::T_numtype, P_numtype2> > T_expr;
6003
6004 return _bz_MatExpr<T_expr>(T_expr(d1,
6005 d2._bz_getRef()));
6006}
6007
6008// _bz_MatExpr<P_expr1> || _bz_MatExpr<P_expr2>
6009template<class P_expr1, class P_expr2>
6010inline
6011_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
6012 _bz_MatExpr<P_expr2>, _bz_LogicalOr<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > >
6013operator||(_bz_MatExpr<P_expr1> d1, _bz_MatExpr<P_expr2> d2)
6014{
6015 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
6016 _bz_MatExpr<P_expr2>,
6017 _bz_LogicalOr<_bz_typename P_expr1::T_numtype, _bz_typename P_expr2::T_numtype> > T_expr;
6018
6019 return _bz_MatExpr<T_expr>(T_expr(d1,
6020 d2));
6021}
6022
6023// _bz_MatExpr<P_expr1> || int
6024template<class P_expr1>
6025inline
6026_bz_MatExpr<_bz_MatExprOp<_bz_MatExpr<P_expr1>,
6027 _bz_MatExprConstant<int>, _bz_LogicalOr<_bz_typename P_expr1::T_numtype, int> > >
6028operator||(_bz_MatExpr<P_expr1> d1, int d2)
6029{
6030 typedef _bz_MatExprOp<_bz_MatExpr<P_expr1>,
6031 _bz_MatExprConstant<int>,
6032 _bz_LogicalOr<_bz_typename P_expr1::T_numtype, int> > T_expr;
6033
6034 return _bz_MatExpr<T_expr>(T_expr(d1,
6035 _bz_MatExprConstant<int>(d2)));
6036}
6037
6038// int || Matrix<P_numtype2, P_struct2>
6039template<class P_numtype2, class P_struct2>
6040inline
6041_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
6042 _bz_MatrixRef<P_numtype2, P_struct2>, _bz_LogicalOr<int, P_numtype2> > >
6043operator||(int d1, const Matrix<P_numtype2, P_struct2>& d2)
6044{
6045 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
6046 _bz_MatrixRef<P_numtype2, P_struct2>,
6047 _bz_LogicalOr<int, P_numtype2> > T_expr;
6048
6049 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
6050 d2._bz_getRef()));
6051}
6052
6053// int || _bz_MatExpr<P_expr2>
6054template<class P_expr2>
6055inline
6056_bz_MatExpr<_bz_MatExprOp<_bz_MatExprConstant<int>,
6057 _bz_MatExpr<P_expr2>, _bz_LogicalOr<int, _bz_typename P_expr2::T_numtype> > >
6058operator||(int d1, _bz_MatExpr<P_expr2> d2)
6059{
6060 typedef _bz_MatExprOp<_bz_MatExprConstant<int>,
6061 _bz_MatExpr<P_expr2>,
6062 _bz_LogicalOr<int, _bz_typename P_expr2::T_numtype> > T_expr;
6063
6064 return _bz_MatExpr<T_expr>(T_expr(_bz_MatExprConstant<int>(d1),
6065 d2));
6066}
6067
6068BZ_NAMESPACE_END
6069
6070#endif // BZ_MATBOPS_H
Note: See TracBrowser for help on using the repository browser.