00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef SELDON_FILE_MATRIX_HERMITIAN_HXX
00024
00025 #include "../share/Common.hxx"
00026 #include "../share/Properties.hxx"
00027 #include "../share/Storage.hxx"
00028 #include "../share/Errors.hxx"
00029 #include "../share/Allocator.hxx"
00030
00031 namespace Seldon
00032 {
00033
00034
00036 template <class T, class Prop, class Storage,
00037 class Allocator = SELDON_DEFAULT_ALLOCATOR<T> >
00038 class Matrix_Hermitian: public Matrix_Base<T, Allocator>
00039 {
00040
00041 public:
00042 typedef typename Allocator::value_type value_type;
00043 typedef typename Allocator::pointer pointer;
00044 typedef typename Allocator::const_pointer const_pointer;
00045 typedef typename Allocator::reference reference;
00046 typedef typename Allocator::const_reference const_reference;
00047 typedef typename Allocator::value_type entry_type;
00048 typedef typename Allocator::value_type access_type;
00049 typedef typename Allocator::value_type const_access_type;
00050
00051
00052 protected:
00053 pointer* me_;
00054
00055
00056 public:
00057
00058 Matrix_Hermitian();
00059 Matrix_Hermitian(int i, int j = 0);
00060 Matrix_Hermitian(const Matrix_Hermitian<T, Prop, Storage, Allocator>& A);
00061
00062
00063 ~Matrix_Hermitian();
00064 void Clear();
00065
00066
00067 int GetDataSize() const;
00068
00069
00070 void Reallocate(int i, int j);
00071 void SetData(int i, int j, pointer data);
00072 void Nullify();
00073 void Resize(int i, int j);
00074
00075
00076 value_type operator() (int i, int j) const;
00077 const_reference Val(int i, int j) const;
00078 reference Val(int i, int j);
00079 const_reference Get(int i, int j) const;
00080 reference Get(int i, int j);
00081 reference operator[] (int i);
00082 const_reference operator[] (int i) const;
00083
00084 Matrix_Hermitian<T, Prop, Storage, Allocator>&
00085 operator= (const Matrix_Hermitian<T, Prop, Storage, Allocator>& A);
00086
00087 void Set(int i, int j, const T& x);
00088 void Copy(const Matrix_Hermitian<T, Prop, Storage, Allocator>& A);
00089
00090
00091 void Zero();
00092 void SetIdentity();
00093 void Fill();
00094 template <class T0>
00095 void Fill(const T0& x);
00096 template <class T0>
00097 Matrix_Hermitian<T, Prop, Storage, Allocator>&
00098 operator= (const T0& x);
00099 void FillRand();
00100 void Print() const;
00101 void Print(int a, int b, int m, int n) const;
00102 void Print(int l) const;
00103
00104
00105 void Write(string FileName) const;
00106 void Write(ostream& FileStream) const;
00107 void WriteText(string FileName) const;
00108 void WriteText(ostream& FileStream) const;
00109 void Read(string FileName);
00110 void Read(istream& FileStream);
00111 void ReadText(string FileName);
00112 void ReadText(istream& FileStream);
00113
00114 };
00115
00116
00118 template <class T, class Prop, class Allocator>
00119 class Matrix<T, Prop, ColHerm, Allocator>:
00120 public Matrix_Hermitian<T, Prop, ColHerm, Allocator>
00121 {
00122
00123 public:
00124 typedef typename Allocator::value_type value_type;
00125 typedef Prop property;
00126 typedef ColHerm storage;
00127 typedef Allocator allocator;
00128
00129 public:
00130 Matrix();
00131 Matrix(int i, int j = 0);
00132
00133 template <class T0>
00134 Matrix<T, Prop, ColHerm, Allocator>& operator= (const T0& x);
00135 Matrix<T, Prop, ColHerm, Allocator>& operator= (const Matrix<T, Prop,
00136 ColHerm,
00137 Allocator>& A);
00138 template<class T0>
00139 Matrix<T, Prop, ColHerm, Allocator>& operator*= (const T0& x);
00140
00141 };
00142
00143
00145 template <class T, class Prop, class Allocator>
00146 class Matrix<T, Prop, RowHerm, Allocator>:
00147 public Matrix_Hermitian<T, Prop, RowHerm, Allocator>
00148 {
00149
00150 public:
00151 typedef typename Allocator::value_type value_type;
00152 typedef Prop property;
00153 typedef RowHerm storage;
00154 typedef Allocator allocator;
00155
00156 public:
00157 Matrix();
00158 Matrix(int i, int j = 0);
00159
00160 template <class T0>
00161 Matrix<T, Prop, RowHerm, Allocator>& operator= (const T0& x);
00162 Matrix<T, Prop, RowHerm, Allocator>& operator= (const Matrix<T, Prop,
00163 RowHerm,
00164 Allocator>& A);
00165 template<class T0>
00166 Matrix<T, Prop, RowHerm, Allocator>& operator*= (const T0& x);
00167
00168 };
00169
00170
00171 }
00172
00173 #define SELDON_FILE_MATRIX_HERMITIAN_HXX
00174 #endif