| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

MagMat.h

Go to the documentation of this file.
00001 #ifndef MAGNET_MAGMAT_H
00002 #define MAGNET_MAGMAT_H
00003 
00004 
00005 #include <iostream>
00006 #include <iomanip>
00007 
00008 
00009 
00010 class MagMat
00011 
00012 {
00013 
00014 
00015  public:
00016 
00017   MagMat(int N, int M);
00018   MagMat();
00019   MagMat(const MagMat& m);
00020  ~MagMat();
00021 
00022  
00023 
00024  class MagMat_row {
00025  public:
00026    inline MagMat_row(MagMat&,int);
00027    double & operator[](int);
00028  private:
00029    MagMat& _a;
00030    int _r;
00031  };
00032  class MagMat_row_const {
00033  public:
00034    inline MagMat_row_const(const MagMat&,int);
00035    const double & operator[](int) const;
00036  private:
00037    const MagMat& _a;
00038    int _r;
00039  };
00040  // helper class to implement m[i][j]
00041 
00042  inline MagMat_row operator[] (int);
00043  inline MagMat_row_const operator[] (int) const;
00044 
00045  MagMat&  operator=(const MagMat& m);
00046   MagMat   operator+(const MagMat& m);  
00047  MagMat   operator+(const MagMat& m) const;  
00048  MagMat&  operator+=(const MagMat& m);
00049  MagMat   operator-(const MagMat& m);
00050  MagMat   operator-(const MagMat& m) const;
00051  MagMat&   operator-=(const MagMat& m);
00052  MagMat   operator*(const MagMat& m);
00053  MagMat   operator*(const MagMat& m) const;
00054   MagMat&   operator*=(const double& d);
00055 
00056  // transposed matrix
00057  MagMat T() const;
00058  //
00059 //invert sym matrix declared as non-symetric for convenience
00060 
00061  
00062 
00063  int nrow() const;
00064  int ncol() const;
00065  // reSize method
00066  void reSize (int Nnew, int Mnew);
00067 
00068  
00069 
00070   //  void invert(int ierr); // only if Ncol=Nrow !!
00071 
00072  private:
00073 
00074  
00075   friend class MagMat_row;
00076   friend class MagMat_row_const;
00077 
00078 
00079   void copy(const MagMat&  m);
00080   //  void copyS(const AlSymMat&  m);
00081 
00082   int Ncol, Nrow;
00083   int Nele;
00084   double* ptr_data;
00085 
00086   //  double* mat_p;
00087   // double** mat;
00088 
00089 };
00090 
00091 // inline operators
00092 
00093 inline MagMat::MagMat_row MagMat::operator[] (int r)
00094 {
00095   MagMat_row b(*this,r);
00096   return b;
00097 }
00098 
00099 inline MagMat::MagMat_row_const MagMat::operator[] (int r) const
00100 
00101 {
00102   const MagMat_row_const b(*this,r);
00103 
00104   return b;
00105 }
00106 
00107 inline double &MagMat::MagMat_row::operator[](int c)
00108 {
00109    if(_r<0||_r>=_a.Nrow || c<0||c>=_a.Ncol)
00110       std::cerr << "Range error in MagMat::operator[][]" << std::endl;
00111 
00112    return *(_a.ptr_data+_r*_a.Ncol+c);
00113 
00114 }
00115 
00116 inline const double & MagMat::MagMat_row_const::operator[](int c) const 
00117 {
00118 
00119    if(_r<0||_r>=_a.Nrow || c<0||c>=_a.Ncol)
00120      std::cerr << "Range error in MagMat::operator[][]" << std::endl;
00121    
00122    return *(_a.ptr_data+_r*_a.Ncol+c);
00123  
00124 }
00125 
00126 inline MagMat::MagMat_row::MagMat_row(MagMat &a,int r) 
00127    : _a(a), _r(r)
00128 {}
00129 
00130 inline MagMat::MagMat_row_const::MagMat_row_const
00131 (const MagMat&a,int r) 
00132    : _a(a), _r(r)
00133 {}
00134 
00135 #endif // MAGNET_MAGMAT_H
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:04:54 2011 for Magnet by doxygen 1.4.7