TinyMatrixExpressionInline.cxx
1 #ifndef SELDON_FILE_TINY_MATRIX_EXPRESSION_INLINE_CXX
2 
3 namespace Seldon
4 {
5 
7  template<class T, int m, int n, class E>
8  inline const T TinyMatrixExpression<T, m, n, E>::operator()(int i, int j) const
9  {
10  return static_cast<const E&>(*this)(i, j);
11  }
12 
13 
15  template<class T, int m, int n, class E1, class E2> template<class T1, class T2>
19  : u_(u), v_(v)
20  {
21  }
22 
23 
25  template<class T, int m, int n, class E1, class E2>
26  inline const T TinyMatrixDifference<T, m, n, E1, E2>::operator()(int i, int j) const
27  {
28  return u_(i, j) - v_(i, j);
29  }
30 
31 
33  template<class T, int m, int n, class E1, class E2> template<class T1, class T2>
37  : u_(u), v_(v)
38  {
39  }
40 
41 
43  template<class T, int m, int n, class E1, class E2>
44  inline const T TinyMatrixSum<T, m, n, E1, E2>::operator()(int i, int j) const
45  {
46  return u_(i, j) + v_(i, j);
47  }
48 
49 
51  template<class T, int m, int n, class E1, class E2> template<class T1, class T2>
55  : u_(u), v_(v)
56  {
57  }
58 
59 
61  template<class T, int m, int n, class E1, class E2>
62  inline const T TinyMatrixProduct<T, m, n, E1, E2>::operator()(int i, int j) const
63  {
64  return u_(i, j) * v_(i, j);
65  }
66 
67 
69  template<class T, int m, int n, class E1, class E2> template<class T1, class T2>
73  : u_(u), v_(v)
74  {
75  }
76 
77 
79  template<class T, int m, int n, class E1, class E2>
80  inline const T TinyMatrixDivision<T, m, n, E1, E2>::operator()(int i, int j) const
81  {
82  return u_(i, j) / v_(i, j);
83  }
84 
85 
87  template<class T, int m, int n, class T0, class E> template<class T1>
89  ::TinyMatrixScaled(const T0& alpha,
91  : alpha_(alpha), u_(u)
92  {
93  }
94 
95 
97  template<class T, int m, int n, class T0, class E>
98  inline const T TinyMatrixScaled<T, m, n, T0, E>::operator()(int i, int j) const
99  {
100  return alpha_*u_(i, j);
101  }
102 
103 
105  template<class T, int m, int n, class T0, class E> template<class T1>
108  : alpha_(alpha), u_(u)
109  {
110  }
111 
112 
114  template<class T, int m, int n, class T0, class E>
115  inline const T TinyMatrixScalDiv<T, m, n, T0, E>::operator()(int i, int j) const
116  {
117  return alpha_ / u_(i, j);
118  }
119 
120 
122  template<class T, int m, int n, class T0, class E> template<class T1>
124  ::TinyMatrixScalSum(const T0& alpha,
126  : alpha_(alpha), u_(u)
127  {
128  }
129 
130 
132  template<class T, int m, int n, class T0, class E>
133  inline const T TinyMatrixScalSum<T, m, n, T0, E>::operator()(int i, int j) const
134  {
135  return alpha_ + u_(i, j);
136  }
137 
138 
140  template<class T, int m, int n, class T0, class E> template<class T1>
142  ::TinyMatrixScalDiff(const T0& alpha,
144  : alpha_(alpha), u_(u)
145  {
146  }
147 
148 
150  template<class T, int m, int n, class T0, class E>
151  inline const T TinyMatrixScalDiff<T, m, n, T0, E>::operator()(int i, int j) const
152  {
153  return alpha_ - u_(i, j);
154  }
155 
156 
158  template<class T, int m, int n, class E>
160  : u_(u)
161  {
162  }
163 
164 
166  template<class T, int m, int n, class E>
167  inline const T TinyMatrixOpposite<T, m, n, E>::operator()(int i, int j) const
168  {
169  return -u_(i, j);
170  }
171 
172 
174  template<class T, int m, int n, class E>
176  : u_(u)
177  {
178  }
179 
180 
182  template<class T, int m, int n, class E>
183  inline const T TinyMatrixTranspose<T, m, n, E>::operator()(int i, int j) const
184  {
185  return u_(j, i);
186  }
187 
188 
189  /*************
190  * Operators *
191  *************/
192 
193 
195  template<class T, int m, int n, class E1, class E2>
196  inline const TinyMatrixSum<T, m, n, E1, E2>
199  {
200  return TinyMatrixSum<T, m, n, E1, E2>(u, v);
201  }
202 
203 
205  template<class T, int m, int n, class E1, class E2>
206  inline const TinyMatrixSum<complex<T>, m, n, E1, E2>
207  operator +(const TinyMatrixExpression<complex<T>, m, n, E1>& u,
209  {
210  return TinyMatrixSum<complex<T>, m, n, E1, E2>(u, v);
211  }
212 
213 
215  template<class T, int m, int n, class E1, class E2>
216  inline const TinyMatrixSum<complex<T>, m, n, E1, E2>
218  const TinyMatrixExpression<complex<T>, m, n, E2>& v)
219  {
220  return TinyMatrixSum<complex<T>, m, n, E1, E2>(u, v);
221  }
222 
223 
225  template<class T, int m, int n, class E1, class E2>
226  inline const TinyMatrixDifference<T, m, n, E1, E2>
229  {
231  }
232 
233 
235  template<class T, int m, int n, class E1, class E2>
236  inline const TinyMatrixDifference<complex<T>, m, n, E1, E2>
237  operator -(const TinyMatrixExpression<complex<T>, m, n, E1>& u,
239  {
240  return TinyMatrixDifference<complex<T>, m, n, E1, E2>(u, v);
241  }
242 
243 
245  template<class T, int m, int n, class E1, class E2>
246  inline const TinyMatrixDifference<complex<T>, m, n, E1, E2>
248  const TinyMatrixExpression<complex<T>, m, n, E2>& v)
249  {
250  return TinyMatrixDifference<complex<T>, m, n, E1, E2>(u, v);
251  }
252 
253 
255  template<class T, int m, int n, class E1, class E2>
256  inline const TinyMatrixProduct<T, m, n, E1, E2>
259  {
261  }
262 
263 
265  template<class T, int m, int n, class E1, class E2>
266  inline const TinyMatrixProduct<complex<T>, m, n, E1, E2>
267  operator *(const TinyMatrixExpression<complex<T>, m, n, E1>& u,
269  {
270  return TinyMatrixProduct<complex<T>, m, n, E1, E2>(u, v);
271  }
272 
273 
275  template<class T, int m, int n, class E1, class E2>
276  inline const TinyMatrixProduct<complex<T>, m, n, E1, E2>
278  const TinyMatrixExpression<complex<T>, m, n, E2>& v)
279  {
280  return TinyMatrixProduct<complex<T>, m, n, E1, E2>(u, v);
281  }
282 
283 
285  template<class T, int m, int n, class E1, class E2>
286  inline const TinyMatrixDivision<T, m, n, E1, E2>
289  {
291  }
292 
293 
295  template<class T, int m, int n, class E1, class E2>
296  inline const TinyMatrixDivision<complex<T>, m, n, E1, E2>
297  operator /(const TinyMatrixExpression<complex<T>, m, n, E1>& u,
299  {
300  return TinyMatrixDivision<complex<T>, m, n, E1, E2>(u, v);
301  }
302 
303 
305  template<class T, int m, int n, class E1, class E2>
306  inline const TinyMatrixDivision<complex<T>, m, n, E1, E2>
308  const TinyMatrixExpression<complex<T>, m, n, E2>& v)
309  {
310  return TinyMatrixDivision<complex<T>, m, n, E1, E2>(u, v);
311  }
312 
313 
315  template<class T, int m, int n, class E>
316  inline const TinyMatrixScaled<T, m, n, T, E> operator *(const T& alpha,
318  {
319  return TinyMatrixScaled<T, m, n, T, E>(alpha, u);
320  }
321 
322 
324  template<class T, int m, int n, class E>
325  inline const TinyMatrixScaled<complex<T>, m, n, complex<T>, E>
326  operator *(const complex<T>& alpha,
328  {
329  return TinyMatrixScaled<complex<T>, m, n, complex<T>, E>(alpha, u);
330  }
331 
332 
334  template<class T, int m, int n, class E>
335  inline const TinyMatrixScaled<complex<T>, m, n, T, E>
336  operator *(const T& alpha,
337  const TinyMatrixExpression<complex<T>, m, n, E>& u)
338  {
339  return TinyMatrixScaled<complex<T>, m, n, T, E>(alpha, u);
340  }
341 
342 
344  template<class T, int m, int n, class E>
346  const T& alpha)
347  {
348  return TinyMatrixScaled<T, m, n, T, E>(alpha, u);
349  }
350 
351 
353  template<class T, int m, int n, class E>
354  inline const TinyMatrixScaled<complex<T>, m, n, complex<T>, E>
356  const complex<T>& alpha)
357  {
358  return TinyMatrixScaled<complex<T>, m, n, complex<T>, E>(alpha, u);
359  }
360 
361 
363  template<class T, int m, int n, class E>
364  inline const TinyMatrixScaled<complex<T>, m, n, T, E>
365  operator *(const TinyMatrixExpression<complex<T>, m, n, E>& u,
366  const T& alpha)
367  {
368  return TinyMatrixScaled<complex<T>, m, n, T, E>(alpha, u);
369  }
370 
371 
373  template<class T, int m, int n, class E>
374  inline const TinyMatrixScalDiv<T, m, n, T, E> operator /(const T& alpha,
376  {
377  return TinyMatrixScalDiv<T, m, n, T, E>(alpha, u);
378  }
379 
380 
382  template<class T, int m, int n, class E>
383  inline const TinyMatrixScalDiv<complex<T>, m, n, complex<T>, E>
384  operator /(const complex<T>& alpha,
386  {
387  return TinyMatrixScalDiv<complex<T>, m, n, complex<T>, E>(alpha, u);
388  }
389 
390 
392  template<class T, int m, int n, class E>
393  inline const TinyMatrixScalDiv<complex<T>, m, n, T, E>
394  operator /(const T& alpha,
395  const TinyMatrixExpression<complex<T>, m, n, E>& u)
396  {
397  return TinyMatrixScalDiv<complex<T>, m, n, T, E>(alpha, u);
398  }
399 
400 
402  template<class T, int m, int n, class E>
404  const T& alpha)
405  {
406  T one; SetComplexOne(one);
407  return TinyMatrixScaled<T, m, n, T, E>(one/alpha, u);
408  }
409 
410 
412  template<class T, int m, int n, class E>
413  inline const TinyMatrixScaled<complex<T>, m, n, complex<T>, E>
415  const complex<T>& alpha)
416  {
417  T one; SetComplexOne(one);
418  return TinyMatrixScaled<complex<T>, m, n, complex<T>, E>(one/alpha, u);
419  }
420 
421 
423  template<class T, int m, int n, class E>
424  inline const TinyMatrixScaled<complex<T>, m, n, T, E>
425  operator /(const TinyMatrixExpression<complex<T>, m, n, E>& u,
426  const T& alpha)
427  {
428  T one; SetComplexOne(one);
429  return TinyMatrixScaled<complex<T>, m, n, T, E>(one/alpha, u);
430  }
431 
432 
434  template<class T, int m, int n, class E>
435  inline const TinyMatrixScalSum<T, m, n, T, E> operator +(const T& alpha,
437  {
438  return TinyMatrixScalSum<T, m, n, T, E>(alpha, u);
439  }
440 
441 
443  template<class T, int m, int n, class E>
444  inline const TinyMatrixScalSum<complex<T>, m, n, complex<T>, E>
445  operator +(const complex<T>& alpha,
447  {
448  return TinyMatrixScalSum<complex<T>, m, n, complex<T>, E>(alpha, u);
449  }
450 
451 
453  template<class T, int m, int n, class E>
454  inline const TinyMatrixScalSum<complex<T>, m, n, T, E>
455  operator +(const T& alpha,
456  const TinyMatrixExpression<complex<T>, m, n, E>& u)
457  {
458  return TinyMatrixScalSum<complex<T>, m, n, T, E>(alpha, u);
459  }
460 
461 
463  template<class T, int m, int n, class E>
465  const T& alpha)
466  {
467  return TinyMatrixScalSum<T, m, n, T, E>(alpha, u);
468  }
469 
470 
472  template<class T, int m, int n, class E>
473  inline const TinyMatrixScalSum<complex<T>, m, n, complex<T>, E>
475  const complex<T>& alpha)
476  {
477  return TinyMatrixScalSum<complex<T>, m, n, complex<T>, E>(alpha, u);
478  }
479 
480 
482  template<class T, int m, int n, class E>
483  inline const TinyMatrixScalSum<complex<T>, m, n, T, E>
484  operator +(const TinyMatrixExpression<complex<T>, m, n, E>& u,
485  const T& alpha)
486  {
487  return TinyMatrixScalSum<complex<T>, m, n, T, E>(alpha, u);
488  }
489 
490 
492  template<class T, int m, int n, class E>
494  const T& alpha)
495  {
496  return TinyMatrixScalSum<T, m, n, T, E>(-alpha, u);
497  }
498 
499 
501  template<class T, int m, int n, class E>
502  inline const TinyMatrixScalSum<complex<T>, m, n, complex<T>, E>
504  const complex<T>& alpha)
505  {
506  return TinyMatrixScalSum<complex<T>, m, n, complex<T>, E>(-alpha, u);
507  }
508 
509 
511  template<class T, int m, int n, class E>
512  inline const TinyMatrixScalSum<complex<T>, m, n, T, E>
513  operator -(const TinyMatrixExpression<complex<T>, m, n, E>& u,
514  const T& alpha)
515  {
516  return TinyMatrixScalSum<complex<T>, m, n, T, E>(-alpha, u);
517  }
518 
519 
521  template<class T, int m, int n, class E>
522  inline const TinyMatrixScalDiff<T, m, n, T, E> operator -(const T& alpha,
524  {
525  return TinyMatrixScalDiff<T, m, n, T, E>(alpha, u);
526  }
527 
528 
530  template<class T, int m, int n, class E>
531  inline const TinyMatrixScalDiff<complex<T>, m, n, complex<T>, E>
532  operator -(const complex<T>& alpha,
534  {
535  return TinyMatrixScalDiff<complex<T>, m, n, complex<T>, E>(alpha, u);
536  }
537 
538 
540  template<class T, int m, int n, class E>
541  inline const TinyMatrixScalDiff<complex<T>, m, n, T, E>
542  operator -(const T& alpha,
543  const TinyMatrixExpression<complex<T>, m, n, E>& u)
544  {
545  return TinyMatrixScalDiff<complex<T>, m, n, T, E>(alpha, u);
546  }
547 
548 
550  template<class T, int m, int n, class E>
552  {
554  }
555 
556 
558  template<class T, int m, int n, class E>
560  {
562  }
563 
564 }
565 
566 #define SELDON_FILE_TINY_MATRIX_EXPRESSION_INLINE_CXX
567 #endif
Seldon::operator*
const TinyMatrixProduct< T, m, n, E1, E2 > operator*(const TinyMatrixExpression< T, m, n, E1 > &u, const TinyMatrixExpression< T, m, n, E2 > &v)
returns u*v element-wise
Definition: TinyMatrixExpressionInline.cxx:257
Seldon::TinyMatrixScalDiff::operator()
const T operator()(int, int) const
returns the i-th element of alpha - u
Definition: TinyMatrixExpressionInline.cxx:151
Seldon::operator+
const TinyMatrixSum< T, m, n, E1, E2 > operator+(const TinyMatrixExpression< T, m, n, E1 > &u, const TinyMatrixExpression< T, m, n, E2 > &v)
returns u+v
Definition: TinyMatrixExpressionInline.cxx:197
Seldon::TinyMatrixScalDiff::TinyMatrixScalDiff
TinyMatrixScalDiff(const T0 &, const TinyMatrixExpression< T1, m, n, E > &)
Constructor alpha - u with a scalar alpha and an expression u.
Definition: TinyMatrixExpressionInline.cxx:142
Seldon::TinyMatrixScalSum::TinyMatrixScalSum
TinyMatrixScalSum(const T0 &, const TinyMatrixExpression< T1, m, n, E > &)
Constructor alpha + u with a scalar alpha and an expression u.
Definition: TinyMatrixExpressionInline.cxx:124
Seldon::TinyMatrixScaled
Multiplication between a scalar and a matrix.
Definition: TinyMatrixExpression.hxx:85
Seldon::TinyMatrixSum::operator()
const T operator()(int, int) const
returns the i-th element of the sum
Definition: TinyMatrixExpressionInline.cxx:44
Seldon::TinyMatrixDifference
Difference between two expressions.
Definition: TinyMatrixExpression.hxx:21
Seldon::TinyMatrixTranspose
Transpose of a matrix.
Definition: TinyMatrixExpression.hxx:163
Seldon::TinyMatrixOpposite::operator()
const T operator()(int, int) const
returns the i-th element of -u
Definition: TinyMatrixExpressionInline.cxx:167
Seldon::TinyMatrixDivision::TinyMatrixDivision
TinyMatrixDivision(const TinyMatrixExpression< T1, m, n, E1 > &, const TinyMatrixExpression< T2, m, n, E2 > &)
Constructor u / v with two expressions u and v.
Definition: TinyMatrixExpressionInline.cxx:71
Seldon::TinyMatrixDifference::operator()
const T operator()(int, int) const
returns the i-th element of the difference
Definition: TinyMatrixExpressionInline.cxx:26
Seldon::TinyMatrixDivision
Division between two expressions (elementwise)
Definition: TinyMatrixExpression.hxx:69
Seldon::TinyMatrixOpposite::TinyMatrixOpposite
TinyMatrixOpposite(const TinyMatrixExpression< T, m, n, E > &)
Constructor -u with an expression u.
Definition: TinyMatrixExpressionInline.cxx:159
Seldon::TinyMatrixScalSum
Addition between a scalar and a matrix.
Definition: TinyMatrixExpression.hxx:117
Seldon::TinyMatrixTranspose::TinyMatrixTranspose
TinyMatrixTranspose(const TinyMatrixExpression< T, n, m, E > &)
Constructor transpose(u) with an expression u.
Definition: TinyMatrixExpressionInline.cxx:175
Seldon::TinyMatrixScalDiv::TinyMatrixScalDiv
TinyMatrixScalDiv(const T0 &, const TinyMatrixExpression< T1, m, n, E > &)
Constructor alpha / u with a scalar alpha and an expression u.
Definition: TinyMatrixExpressionInline.cxx:106
Seldon::operator/
const TinyMatrixDivision< T, m, n, E1, E2 > operator/(const TinyMatrixExpression< T, m, n, E1 > &u, const TinyMatrixExpression< T, m, n, E2 > &v)
returns u/v element-wise
Definition: TinyMatrixExpressionInline.cxx:287
Seldon::transpose
const TinyMatrixTranspose< T, m, n, E > transpose(const TinyMatrixExpression< T, n, m, E > &u)
returns transpose(u)
Definition: TinyMatrixExpressionInline.cxx:559
Seldon::TinyMatrixScaled::TinyMatrixScaled
TinyMatrixScaled(const T0 &, const TinyMatrixExpression< T1, m, n, E > &)
Constructor alpha * u with a scalar alpha and an expression u.
Definition: TinyMatrixExpressionInline.cxx:89
Seldon::TinyMatrixProduct::operator()
const T operator()(int, int) const
returns the i-th element of the element-wise product
Definition: TinyMatrixExpressionInline.cxx:62
Seldon::TinyMatrixScaled::operator()
const T operator()(int, int) const
returns the i-th element of alpha*u
Definition: TinyMatrixExpressionInline.cxx:98
Seldon::TinyMatrixProduct::TinyMatrixProduct
TinyMatrixProduct(const TinyMatrixExpression< T1, m, n, E1 > &, const TinyMatrixExpression< T2, m, n, E2 > &)
Constructor u*v with two expressions u and v.
Definition: TinyMatrixExpressionInline.cxx:53
Seldon::TinyMatrixExpression::operator()
const T operator()(int, int) const
returns the element i of expression
Definition: TinyMatrixExpressionInline.cxx:8
Seldon::TinyMatrixScalDiv
Division between a scalar and a matrix.
Definition: TinyMatrixExpression.hxx:101
Seldon::TinyMatrixExpression
Expression between vectors.
Definition: TinyMatrixExpression.hxx:8
Seldon::operator-
const TinyMatrixDifference< T, m, n, E1, E2 > operator-(const TinyMatrixExpression< T, m, n, E1 > &u, const TinyMatrixExpression< T, m, n, E2 > &v)
returns u-v
Definition: TinyMatrixExpressionInline.cxx:227
Seldon::TinyMatrixProduct
Product between two expressions (elementwise)
Definition: TinyMatrixExpression.hxx:53
Seldon::TinyMatrixTranspose::operator()
const T operator()(int, int) const
returns the i-th element of -u
Definition: TinyMatrixExpressionInline.cxx:183
Seldon::TinyMatrixScalDiv::operator()
const T operator()(int, int) const
returns the i-th element of alpha / u
Definition: TinyMatrixExpressionInline.cxx:115
Seldon::TinyMatrixScalDiff
Subtraction between a scalar and a matrix.
Definition: TinyMatrixExpression.hxx:133
Seldon::TinyMatrixSum::TinyMatrixSum
TinyMatrixSum(const TinyMatrixExpression< T1, m, n, E1 > &, const TinyMatrixExpression< T2, m, n, E2 > &)
Constructor u+v with two expressions u and v.
Definition: TinyMatrixExpressionInline.cxx:35
Seldon::TinyMatrixSum
Sum between two expressions.
Definition: TinyMatrixExpression.hxx:37
Seldon
Seldon namespace.
Definition: Array.cxx:24
Seldon::TinyMatrixDivision::operator()
const T operator()(int, int) const
returns the i-th element of the element-wise division
Definition: TinyMatrixExpressionInline.cxx:80
Seldon::TinyMatrixDifference::TinyMatrixDifference
TinyMatrixDifference(const TinyMatrixExpression< T1, m, n, E1 > &, const TinyMatrixExpression< T2, m, n, E2 > &)
Constructor u-v with two expressions u and v.
Definition: TinyMatrixExpressionInline.cxx:17
Seldon::TinyMatrixScalSum::operator()
const T operator()(int, int) const
returns the i-th element of alpha + u
Definition: TinyMatrixExpressionInline.cxx:133
Seldon::TinyMatrixOpposite
Opposite of a matrix.
Definition: TinyMatrixExpression.hxx:149