00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef SELDON_FILE_MATRIX_SYMMETRIC_HXX
00023
00024 #include "../Common/Common.hxx"
00025 #include "../Common/Properties.hxx"
00026 #include "../Common/Storage.hxx"
00027 #include "../Common/Errors.cxx"
00028 #include "../Common/Allocator.hxx"
00029
00030 namespace Seldon
00031 {
00032
00033
00035 template <class T, class Prop, class Storage,
00036 class Allocator = SELDON_DEFAULT_ALLOCATOR<T> >
00037 class Matrix_Symmetric: public Spacetown, public Matrix_Base<T, Allocator>
00038 {
00039
00040 public:
00041 typedef typename Allocator::value_type value_type;
00042 typedef typename Allocator::pointer pointer;
00043 typedef typename Allocator::const_pointer const_pointer;
00044 typedef typename Allocator::reference reference;
00045 typedef typename Allocator::const_reference const_reference;
00046
00047
00048 protected:
00049 pointer* me_;
00050
00051
00052 public:
00053
00054 Matrix_Symmetric();
00055 Matrix_Symmetric(int i, int j);
00056
00057
00058 ~Matrix_Symmetric();
00059 void Clear();
00060
00061
00062 int GetDataSize() const;
00063
00064
00065 void Reallocate(int i, int j);
00066 void SetData(int i, int j, pointer data);
00067 void Nullify();
00068
00069
00070 value_type operator() (int i, int j);
00071 value_type operator() (int i, int j) const;
00072 const_reference Val(int i, int j) const;
00073 reference Val(int i, int j);
00074 reference operator[] (int i);
00075 const_reference operator[] (int i) const;
00076 Matrix_Symmetric<T, Prop, Storage, Allocator>&
00077 operator= (const Matrix_Symmetric<T, Prop, Storage, Allocator>& A);
00078 void Copy(const Matrix_Symmetric<T, Prop, Storage, Allocator>& A);
00079
00080
00081 void Zero();
00082 void SetIdentity();
00083 void Fill();
00084 template <class T0>
00085 void Fill(const T0& x);
00086 template <class T0>
00087 Matrix_Symmetric<T, Prop, Storage, Allocator>& operator= (const T0& x);
00088 void FillRand();
00089 void Print() const;
00090 void Print(int a, int b, int m, int n) const;
00091 void Print(int l) const;
00092
00093
00094 value_type GetNormInf() const;
00095
00096
00097 void Write(string FileName) const;
00098 void Write(ofstream& FileStream) const;
00099 void WriteText(string FileName) const;
00100 void WriteText(ofstream& FileStream) const;
00101 void Read(string FileName);
00102 void Read(ifstream& FileStream);
00103
00104 };
00105
00106
00108 template <class T, class Prop, class Allocator>
00109 class Matrix<T, Prop, ColSym, Allocator>:
00110 public Matrix_Symmetric<T, Prop, ColSym, Allocator>
00111 {
00112 public:
00113 Matrix() throw();
00114 Matrix(int i, int j);
00115
00116 template <class T0>
00117 Matrix<T, Prop, ColSym, Allocator>& operator= (const T0& x);
00118 };
00119
00120
00122 template <class T, class Prop, class Allocator>
00123 class Matrix<T, Prop, RowSym, Allocator>:
00124 public Matrix_Symmetric<T, Prop, RowSym, Allocator>
00125 {
00126 public:
00127 Matrix() throw();
00128 Matrix(int i, int j);
00129
00130 template <class T0>
00131 Matrix<T, Prop, RowSym, Allocator>& operator= (const T0& x);
00132 };
00133
00134
00135 }
00136
00137 #define SELDON_FILE_MATRIX_SYMMETRIC_HXX
00138 #endif