// This may look like C code, but it is really -*- C++ -*- // C.Magneville 04/99 #ifndef TMATRIX_SEEN #define TMATRIX_SEEN #include "machdefs.h" #include #include #include "ppersist.h" #include "anydataobj.h" #include "ndatablock.h" namespace PlanckDPC { template class TMatrix : public AnyDataObj { public: // Creation / destruction TMatrix(); TMatrix(uint_4 r,uint_4 c); TMatrix(uint_4 r,uint_4 c,T* values,Bridge* br=NULL); TMatrix(const TMatrix& a); TMatrix(const TMatrix& a,bool share); virtual ~TMatrix(); // Gestion taille/Remplissage void Clone(const TMatrix& a); void Reset(T v=0); void Realloc(uint_4 r,uint_4 c,bool force_alloc=true); // Informations pointeur/data inline int NRows() const {return mNr;} inline int NCol() const {return mNc;} T const& operator()(uint_4 r,uint_4 c) const {return *(mNDBlock->Begin()+r*mNc+c);} T& operator()(uint_4 r,uint_4 c) {return *(mNDBlock->Begin()+r*mNc+c);} inline T* Data() {return mNDBlock->Begin();} inline const T* Data() const {return mNDBlock->Begin();} inline NDataBlock* DataBlock() {return mNDBlock;} inline const NDataBlock* DataBlock() const {return mNDBlock;} // Operateur d'affectation TMatrix& operator = (T x); TMatrix& operator = (const TMatrix& a); // Impression void Print(ostream& os,int lp=0,uint_4 i0=0,uint_4 ni=10,uint_4 j0=0,uint_4 nj=10) const; inline void Print(int lp=0,uint_4 i0=0,uint_4 ni=10,uint_4 j0=0,uint_4 nj=10) const {Print(cout,lp,i0,ni,j0,nj);} // Surcharge d'operateurs TMatrix& operator += (T b); TMatrix& operator -= (T b); TMatrix& operator *= (T b); TMatrix& operator /= (T b); TMatrix& operator += (const TMatrix& a); TMatrix& operator -= (const TMatrix& a); TMatrix& operator *= (const TMatrix& a); protected: void Delete(void); uint_4 mNr,mNc; NDataBlock* mNDBlock; }; template inline ostream& operator << (ostream& os, const TMatrix& a) {a.Print(os); return(os);} } // Fin du namespace #endif