00001 #ifndef __NEW_MAT_GENERIC_MATRIX_H__ 00002 #define __NEW_MAT_GENERIC_MATRIX_H__ 00003 00004 // ************************** GenericMatrix class ************************/ 00005 00007 class GenericMatrix : public BaseMatrix 00008 { 00009 GeneralMatrix* gm; 00010 int search(const BaseMatrix* bm) const; 00011 friend class BaseMatrix; 00012 public: 00013 GenericMatrix() : gm(0) {} 00014 GenericMatrix(const BaseMatrix& bm) 00015 { gm = ((BaseMatrix&)bm).Evaluate(); gm = gm->Image(); } 00016 GenericMatrix(const GenericMatrix& bm) : BaseMatrix() 00017 { gm = bm.gm->Image(); } 00018 void operator=(const GenericMatrix&); 00019 void operator=(const BaseMatrix&); 00020 void operator+=(const BaseMatrix&); 00021 void operator-=(const BaseMatrix&); 00022 void operator*=(const BaseMatrix&); 00023 void operator|=(const BaseMatrix&); 00024 void operator&=(const BaseMatrix&); 00025 void operator+=(Real); 00026 void operator-=(Real r) { operator+=(-r); } 00027 void operator*=(Real); 00028 void operator/=(Real r) { operator*=(1.0/r); } 00029 ~GenericMatrix() { delete gm; } 00030 void cleanup() { delete gm; gm = 0; } 00031 void Release() { gm->Release(); } 00032 void release() { gm->release(); } 00033 GeneralMatrix* Evaluate(MatrixType = MatrixTypeUnSp); 00034 MatrixBandWidth bandwidth() const; 00035 void swap(GenericMatrix& x); 00036 NEW_DELETE(GenericMatrix) 00037 }; 00038 00039 #endif 00040