IT++ Logo

operators.h

Go to the documentation of this file.
00001 
00031 #ifndef OPERATORS_H
00032 #define OPERATORS_H
00033 
00034 #include <itpp/base/vec.h>
00035 #include <itpp/base/mat.h>
00036 #include <itpp/base/converters.h>
00037 
00038 
00039 namespace itpp
00040 {
00041 
00042 //---------------------- between scalars and complex<double> -----------------
00044 inline std::complex<double> operator+(const int &x, const std::complex<double> &y) {return std::complex<double>(x + y.real(), x + y.imag());}
00046 inline std::complex<double> operator+(const float &x, const std::complex<double> &y) {return std::complex<double>(x + y.real(), x + y.imag());}
00048 inline std::complex<double> operator+(const std::complex<double> &x, const int &y) {return std::complex<double>(x.real() + y, x.imag() + y);}
00050 inline std::complex<double> operator+(const std::complex<double> &x, const float &y) {return std::complex<double>(x.real() + y, x.imag() + y);}
00051 
00053 inline std::complex<double> operator-(const int &x, const std::complex<double> &y) {return std::complex<double>(x - y.real(), x - y.imag());}
00055 inline std::complex<double> operator-(const float &x, const std::complex<double> &y) {return std::complex<double>(x - y.real(), x - y.imag());}
00057 inline std::complex<double> operator-(const std::complex<double> &x, const int &y) {return std::complex<double>(x.real() - y, x.imag() - y);}
00059 inline std::complex<double> operator-(const std::complex<double> &x, const float &y) {return std::complex<double>(x.real() - y, x.imag() - y);}
00060 
00062 inline std::complex<double> operator*(const int &x, const std::complex<double> &y) {return std::complex<double>(x*y.real(), x*y.imag());}
00064 inline std::complex<double> operator*(const float &x, const std::complex<double> &y) {return std::complex<double>(x*y.real(), x*y.imag());}
00066 inline std::complex<double> operator*(const std::complex<double> &x, const int &y) {return std::complex<double>(x.real()*y, x.imag()*y);}
00068 inline std::complex<double> operator*(const std::complex<double> &x, const float &y) {return std::complex<double>(x.real()*y, x.imag()*y);}
00069 
00071 inline std::complex<double> operator/(const std::complex<double> &x, const int &y) {return std::complex<double>(x.real() / y, x.imag() / y);}
00073 inline std::complex<double> operator/(const std::complex<double> &x, const float &y) {return std::complex<double>(x.real() / y, x.imag() / y);}
00074 
00075 
00076 //---------------------- between vec and scalar --------------------
00077 
00082 inline vec operator+(const float &s, const vec &v) {return static_cast<double>(s) + v;}
00083 
00088 inline vec operator+(const short &s, const vec &v) {return static_cast<double>(s) + v;}
00089 
00094 inline vec operator+(const int &s, const vec &v) {return static_cast<double>(s) + v;}
00095 
00100 inline vec operator+(const vec &v, const float &s) {return static_cast<double>(s) + v;}
00101 
00106 inline vec operator+(const vec &v, const short &s) {return static_cast<double>(s) + v;}
00107 
00112 inline vec operator+(const vec &v, const int &s) {return static_cast<double>(s) + v;}
00113 
00118 inline vec operator-(const float &s, const vec &v) {return static_cast<double>(s) - v;}
00119 
00124 inline vec operator-(const short &s, const vec &v) {return static_cast<double>(s) - v;}
00125 
00130 inline vec operator-(const int &s, const vec &v) {return static_cast<double>(s) - v;}
00131 
00136 inline vec operator-(const vec &v, const float &s) {return v -static_cast<double>(s);}
00137 
00142 inline vec operator-(const vec &v, const short &s) {return v -static_cast<double>(s);}
00143 
00148 inline vec operator-(const vec &v, const int &s) {return v -static_cast<double>(s);}
00149 
00154 inline vec operator*(const float &s, const vec &v) {return static_cast<double>(s)*v;}
00155 
00160 inline vec operator*(const short &s, const vec &v) {return static_cast<double>(s)*v;}
00161 
00166 inline vec operator*(const int &s, const vec &v) {return static_cast<double>(s)*v;}
00167 
00172 cvec operator*(const std::complex<double> &s, const vec &v);
00173 
00178 inline vec operator*(const vec &v, const float &s) {return static_cast<double>(s)*v;}
00179 
00184 inline vec operator*(const vec &v, const short &s) {return static_cast<double>(s)*v;}
00185 
00190 inline vec operator*(const vec &v, const int &s) {return static_cast<double>(s)*v;}
00191 
00196 cvec operator*(const vec &v, const std::complex<double> &s);
00197 
00202 inline vec operator/(const vec &v, const float &s) {return v / static_cast<double>(s);}
00203 
00208 inline vec operator/(const vec &v, const short &s) {return v / static_cast<double>(s);}
00209 
00214 inline vec operator/(const vec &v, const int &s) {return v / static_cast<double>(s);}
00215 
00216 
00217 //---------------------- between ivec and scalar --------------------
00218 
00223 vec operator+(const double &s, const ivec &v);
00224 
00229 inline vec operator+(const ivec &v, const double &s) { return s + v;}
00230 
00235 vec operator-(const double &s, const ivec &v);
00236 
00241 inline vec operator-(const ivec &v, const double &s) { return v + (-s); }
00242 
00247 vec operator*(const double &s, const ivec &v);
00248 
00253 inline vec operator*(const ivec &v, const double &s) { return s*v; }
00254 
00259 vec operator/(const double &s, const ivec &v);
00260 
00265 vec operator/(const ivec &v, const double &s);
00266 
00271 cvec operator+(const std::complex<double> &s, const ivec &v);
00272 
00277 inline cvec operator+(const ivec &v, const std::complex<double> &s) { return s + v;}
00278 
00283 cvec operator-(const std::complex<double> &s, const ivec &v);
00284 
00289 inline cvec operator-(const ivec &v, const std::complex<double> &s) { return v + (-s); }
00290 
00295 cvec operator*(const std::complex<double> &s, const ivec &v);
00296 
00301 inline cvec operator*(const ivec &v, const std::complex<double> &s) { return s*v; }
00302 
00307 cvec operator/(const std::complex<double> &s, const ivec &v);
00308 
00313 cvec operator/(const ivec &v, const std::complex<double> &s);
00314 
00315 //---------------------- between cvec and scalar --------------------
00316 
00321 cvec operator+(const double &s, const cvec &v);
00322 
00327 inline cvec operator+(const float &s, const cvec &v) {return static_cast<double>(s) + v;}
00328 
00333 inline cvec operator+(const short &s, const cvec &v) {return static_cast<double>(s) + v;}
00334 
00339 inline cvec operator+(const int &s, const cvec &v) {return static_cast<double>(s) + v;}
00340 
00345 inline cvec operator+(const cvec &v, const float &s) {return s + v;}
00346 
00351 inline cvec operator+(const cvec &v, const double &s) {return s + v;}
00352 
00357 inline cvec operator+(const cvec &v, const short &s) {return s + v;}
00358 
00363 inline cvec operator+(const cvec &v, const int &s) {return s + v;}
00364 
00369 cvec operator-(const double &s, const cvec &v);
00370 
00375 inline cvec operator-(const float &s, const cvec &v) {return static_cast<double>(s) - v;}
00376 
00381 inline cvec operator-(const short &s, const cvec &v) {return static_cast<double>(s) - v;}
00382 
00387 inline cvec operator-(const int &s, const cvec &v) {return static_cast<double>(s) - v;}
00388 
00393 inline cvec operator-(const cvec &v, const float &s) {return v + (-s);}
00394 
00399 inline cvec operator-(const cvec &v, const double &s) {return v + (-s);}
00400 
00405 inline cvec operator-(const cvec &v, const short &s) {return v + (-s);}
00406 
00411 inline cvec operator-(const cvec &v, const int &s) {return v + (-s);}
00412 
00417 cvec operator*(const double &s, const cvec &v);
00418 
00423 inline cvec operator*(const float &s, const cvec &v) {return static_cast<double>(s)*v;}
00424 
00429 inline cvec operator*(const short &s, const cvec &v) {return static_cast<double>(s)*v;}
00430 
00435 inline cvec operator*(const int &s, const cvec &v) {return static_cast<double>(s)*v;}
00436 
00441 inline cvec operator*(const cvec &v, const float &s) {return s*v;}
00442 
00447 inline cvec operator*(const cvec &v, const double &s) {return s*v;}
00448 
00453 inline cvec operator*(const cvec &v, const short &s) {return s*v;}
00454 
00459 inline cvec operator*(const cvec &v, const int &s) {return s*v;}
00460 
00465 cvec operator/(const cvec &v, const double &s);
00466 
00471 cvec operator/(const double &s, const cvec &v);
00472 
00477 inline cvec operator/(const cvec &v, const float &s) {return v / static_cast<double>(s);}
00478 
00483 inline cvec operator/(const cvec &v, const short &s) {return v / static_cast<double>(s);}
00484 
00489 inline cvec operator/(const cvec &v, const int &s) {return v / static_cast<double>(s);}
00490 
00491 //---------------------- between mat and scalar --------------------
00492 
00497 inline mat operator+(const float &s, const mat &m) {return static_cast<double>(s) + m;}
00498 
00503 inline mat operator+(const short &s, const mat &m) {return static_cast<double>(s) + m;}
00504 
00509 inline mat operator+(const int &s, const mat &m) {return static_cast<double>(s) + m;}
00510 
00515 inline mat operator+(const mat &m, const float &s) {return static_cast<double>(s) + m;}
00516 
00521 inline mat operator+(const mat &m, const short &s) {return static_cast<double>(s) + m;}
00522 
00527 inline mat operator+(const mat &m, const int &s) {return static_cast<double>(s) + m;}
00528 
00533 inline mat operator-(const float &s, const mat &m) {return static_cast<double>(s) - m;}
00534 
00539 inline mat operator-(const short &s, const mat &m) {return static_cast<double>(s) - m;}
00540 
00545 inline mat operator-(const int &s, const mat &m) {return static_cast<double>(s) - m;}
00546 
00551 inline mat operator-(const mat &m, const float &s) {return m -static_cast<double>(s);}
00552 
00557 inline mat operator-(const mat &m, const short &s) {return m -static_cast<double>(s);}
00558 
00563 inline mat operator-(const mat &m, const int &s) {return m -static_cast<double>(s);}
00564 
00569 inline mat operator*(const float &s, const mat &m) {return static_cast<double>(s)*m;}
00570 
00575 inline mat operator*(const short &s, const mat &m) {return static_cast<double>(s)*m;}
00576 
00581 inline mat operator*(const int &s, const mat &m) {return static_cast<double>(s)*m;}
00582 
00587 inline mat operator*(const mat &m, const float &s) {return static_cast<double>(s)*m;}
00588 
00593 inline mat operator*(const mat &m, const short &s) {return static_cast<double>(s)*m;}
00594 
00599 inline mat operator*(const mat &m, const int &s) {return static_cast<double>(s)*m;}
00600 
00605 inline mat operator/(const mat &m, const float &s) {return m / static_cast<double>(s);}
00606 
00611 inline mat operator/(const mat &m, const short &s) {return m / static_cast<double>(s);}
00612 
00617 inline mat operator/(const mat &m, const int &s) {return m / static_cast<double>(s);}
00618 
00619 //---------------------- between cmat and scalar --------------------
00620 
00625 cmat operator+(const double &s, const cmat &m);
00626 
00631 cmat operator-(const double &s, const cmat &m);
00632 
00637 cmat operator*(const double &s, const cmat &m);
00638 
00643 cmat operator*(const std::complex<double> &s, const mat &m);
00644 
00649 inline cmat operator*(const mat &m, const std::complex<double> &s) {return s*m;}
00650 
00655 cmat operator/(const cmat &m, const double &s);
00656 
00657 //---------------------- between vec and vectors --------------------
00658 
00663 vec operator+(const bvec &a, const vec &b);
00664 
00669 vec operator+(const svec &a, const vec &b);
00670 
00675 vec operator+(const ivec &a, const vec &b);
00676 
00681 inline vec operator+(const vec &a, const bvec &b) {return b + a;}
00682 
00687 inline vec operator+(const vec &a, const svec &b) {return b + a;}
00688 
00693 inline vec operator+(const vec &a, const ivec &b) {return b + a;}
00694 
00699 inline vec operator-(const bvec &a, const vec &b) {return a + (-b);}
00700 
00705 inline vec operator-(const svec &a, const vec &b) {return a + (-b);}
00706 
00711 inline vec operator-(const ivec &a, const vec &b) {return a + (-b);}
00712 
00717 inline vec operator-(const vec &a, const bvec &b) {return a + (-b);}
00718 
00723 inline vec operator-(const vec &a, const svec &b) {return a + (-b);}
00724 
00729 inline vec operator-(const vec &a, const ivec &b) {return a + (-b);}
00730 
00735 double operator*(const bvec &a, const vec &b);
00736 
00741 double operator*(const svec &a, const vec &b);
00742 
00747 double operator*(const ivec &a, const vec &b);
00748 
00753 inline double operator*(const vec &a, const bvec &b) {return b*a;}
00754 
00759 inline double operator*(const vec &a, const svec &b) {return b*a;}
00760 
00765 inline double operator*(const vec &a, const ivec &b) {return b*a;}
00766 
00767 //---------------------- between cvec and vectors --------------------
00768 
00773 cvec operator+(const bvec &a, const cvec &b);
00774 
00779 cvec operator+(const svec &a, const cvec &b);
00780 
00785 cvec operator+(const ivec &a, const cvec &b);
00786 
00791 inline cvec operator+(const cvec &a, const bvec &b) {return b + a;}
00792 
00797 inline cvec operator+(const cvec &a, const svec &b) {return b + a;}
00798 
00803 inline cvec operator+(const cvec &a, const ivec &b) {return b + a;}
00804 
00809 inline cvec operator-(const bvec &a, const cvec &b) {return a + (-b);}
00810 
00815 inline cvec operator-(const svec &a, const cvec &b) {return a + (-b);}
00816 
00821 inline cvec operator-(const ivec &a, const cvec &b) {return a + (-b);}
00822 
00827 inline cvec operator-(const cvec &a, const bvec &b) {return a + (-b);}
00828 
00833 inline cvec operator-(const cvec &a, const svec &b) {return a + (-b);}
00834 
00839 inline cvec operator-(const cvec &a, const ivec &b) {return a + (-b);}
00840 
00845 std::complex<double> operator*(const bvec &a, const cvec &b);
00846 
00851 std::complex<double> operator*(const svec &a, const cvec &b);
00852 
00857 std::complex<double> operator*(const ivec &a, const cvec &b);
00858 
00863 inline std::complex<double> operator*(const cvec &a, const bvec &b) {return b*a;}
00864 
00869 inline std::complex<double> operator*(const cvec &a, const svec &b) {return b*a;}
00870 
00875 inline std::complex<double> operator*(const cvec &a, const ivec &b) {return b*a;}
00876 
00877 //---------------------- between mat and matricies --------------------
00878 
00883 mat operator+(const bmat &a, const mat &b);
00884 
00889 mat operator+(const smat &a, const mat &b);
00890 
00895 mat operator+(const imat &a, const mat &b);
00896 
00901 inline mat operator+(const mat &a, const bmat &b) {return b + a;}
00902 
00907 inline mat operator+(const mat &a, const smat &b) {return b + a;}
00908 
00913 inline mat operator+(const mat &a, const imat &b) {return b + a;}
00914 
00919 inline mat operator-(const bmat &a, const mat &b) {return a + (-b);}
00920 
00925 inline mat operator-(const smat &a, const mat &b) {return a + (-b);}
00926 
00931 inline mat operator-(const imat &a, const mat &b) {return a + (-b);}
00932 
00937 inline mat operator-(const mat &a, const bmat &b) {return a + (-b);}
00938 
00943 inline mat operator-(const mat &a, const smat &b) {return a + (-b);}
00944 
00949 inline mat operator-(const mat &a, const imat &b) {return a + (-b);}
00950 
00951 //---------------------- between cmat and matricies --------------------
00952 
00957 cmat operator+(const bmat &a, const cmat &b);
00958 
00963 cmat operator+(const smat &a, const cmat &b);
00964 
00969 cmat operator+(const imat &a, const cmat &b);
00970 
00975 cmat operator+(const mat &a, const cmat &b);
00976 
00981 inline cmat operator+(const cmat &a, const bmat &b) {return b + a;}
00982 
00987 inline cmat operator+(const cmat &a, const smat &b) {return b + a;}
00988 
00993 inline cmat operator+(const cmat &a, const imat &b) {return b + a;}
00994 
00999 inline cmat operator+(const cmat &a, const mat &b) {return b + a;}
01000 
01005 inline cmat operator-(const bmat &a, const cmat &b) {return a + (-b);}
01006 
01011 inline cmat operator-(const smat &a, const cmat &b) {return a + (-b);}
01012 
01017 inline cmat operator-(const imat &a, const cmat &b) {return a + (-b);}
01018 
01023 inline cmat operator-(const mat &a, const cmat &b) {return a + (-b);}
01024 
01029 inline cmat operator-(const cmat &a, const bmat &b) {return a + (-b);}
01030 
01035 inline cmat operator-(const cmat &a, const smat &b) {return a + (-b);}
01036 
01041 inline cmat operator-(const cmat &a, const imat &b) {return a + (-b);}
01042 
01047 inline cmat operator-(const cmat &a, const mat &b) {return a + (-b);}
01048 
01053 inline cmat operator*(const mat &a, const cmat &b) {return to_cmat(a)*b;}
01054 
01059 inline cmat operator*(const bmat &a, const cmat &b) {return to_cmat(a)*b;}
01060 
01065 inline cmat operator*(const smat &a, const cmat &b) {return to_cmat(a)*b;}
01066 
01071 inline cmat operator*(const imat &a, const cmat &b) {return to_cmat(a)*b;}
01072 
01077 inline cmat operator*(const cmat &a, const mat &b) {return a*to_cmat(b);}
01078 
01083 inline cmat operator*(const cmat &a, const bmat &b) {return a*to_cmat(b);}
01084 
01089 inline cmat operator*(const cmat &a, const smat &b) {return a*to_cmat(b);}
01090 
01095 inline cmat operator*(const cmat &a, const imat &b) {return a*to_cmat(b);}
01096 
01097 } // namespace itpp
01098 
01099 #endif // #ifndef OPERATORS_H
01100 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
SourceForge Logo

Generated on Wed Feb 9 2011 13:47:23 for IT++ by Doxygen 1.7.3