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_SYMPACKED_HXX
00023
00024 #include "../share/Common.hxx"
00025 #include "../share/Properties.hxx"
00026 #include "../share/Storage.hxx"
00027 #include "../share/Errors.hxx"
00028 #include "../share/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_SymPacked: 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 typedef typename Allocator::value_type entry_type;
00047 typedef typename Allocator::reference access_type;
00048 typedef typename Allocator::const_reference const_access_type;
00049
00050
00051 protected:
00052
00053
00054 public:
00055
00056 Matrix_SymPacked();
00057 Matrix_SymPacked(int i, int j = 0);
00058 Matrix_SymPacked(const Matrix_SymPacked<T, Prop, Storage, Allocator>& A);
00059
00060
00061 ~Matrix_SymPacked();
00062 void Clear();
00063
00064
00065 int GetDataSize() const;
00066
00067
00068 void Reallocate(int i, int j);
00069 void SetData(int i, int j, pointer data);
00070 void Nullify();
00071
00072
00073 reference operator() (int i, int j);
00074 const_reference operator() (int i, int j) const;
00075 reference Val(int i, int j);
00076 const_reference Val(int i, int j) const;
00077 reference Get(int i, int j);
00078 const_reference Get(int i, int j) const;
00079 reference operator[] (int i);
00080 const_reference operator[] (int i) const;
00081 Matrix_SymPacked<T, Prop, Storage, Allocator>&
00082 operator= (const Matrix_SymPacked<T, Prop, Storage, Allocator>& A);
00083 void Set(int i, int j, const T& x);
00084 void Copy(const Matrix_SymPacked<T, Prop, Storage, Allocator>& A);
00085
00086
00087 void Zero();
00088 void SetIdentity();
00089 void Fill();
00090 template <class T0>
00091 void Fill(const T0& x);
00092 template <class T0>
00093 Matrix_SymPacked<T, Prop, Storage, Allocator>& operator= (const T0& x);
00094 void FillRand();
00095 void Print() const;
00096 void Print(int a, int b, int m, int n) const;
00097 void Print(int l) const;
00098
00099
00100 void Write(string FileName) const;
00101 void Write(ostream& FileStream) const;
00102 void WriteText(string FileName) const;
00103 void WriteText(ostream& FileStream) const;
00104 void Read(string FileName);
00105 void Read(istream& FileStream);
00106 void ReadText(string FileName);
00107 void ReadText(istream& FileStream);
00108 };
00109
00110
00112 template <class T, class Prop, class Allocator>
00113 class Matrix<T, Prop, ColSymPacked, Allocator>:
00114 public Matrix_SymPacked<T, Prop, ColSymPacked, Allocator>
00115 {
00116
00117 public:
00118 typedef typename Allocator::value_type value_type;
00119 typedef Prop property;
00120 typedef ColSymPacked storage;
00121 typedef Allocator allocator;
00122
00123 public:
00124 Matrix();
00125 Matrix(int i, int j = 0);
00126
00127 template <class T0>
00128 Matrix<T, Prop, ColSymPacked, Allocator>& operator= (const T0& x);
00129 Matrix<T, Prop, ColSymPacked, Allocator>& operator= (const Matrix<T, Prop,
00130 ColSymPacked,
00131 Allocator>& A);
00132 template<class T0>
00133 Matrix<T, Prop, ColSymPacked, Allocator>& operator*= (const T0& x);
00134 void Resize(int i, int j);
00135 };
00136
00137
00139 template <class T, class Prop, class Allocator>
00140 class Matrix<T, Prop, RowSymPacked, Allocator>:
00141 public Matrix_SymPacked<T, Prop, RowSymPacked, Allocator>
00142 {
00143
00144 public:
00145 typedef typename Allocator::value_type value_type;
00146 typedef Prop property;
00147 typedef RowSymPacked storage;
00148 typedef Allocator allocator;
00149
00150 public:
00151 Matrix();
00152 Matrix(int i, int j = 0);
00153
00154 template <class T0>
00155 Matrix<T, Prop, RowSymPacked, Allocator>& operator= (const T0& x);
00156 Matrix<T, Prop, RowSymPacked, Allocator>& operator= (const Matrix<T, Prop,
00157 RowSymPacked,
00158 Allocator>& A);
00159 template<class T0>
00160 Matrix<T, Prop, RowSymPacked, Allocator>& operator*= (const T0& x);
00161 void Resize(int i, int j);
00162 };
00163
00164
00165 }
00166
00167 #define SELDON_FILE_MATRIX_SYMPACKED_HXX
00168 #endif