GCpp general purpose C++ library  version 1.0
GMatrixT.hh
Go to the documentation of this file.
1 //======================================================================
2 /*! \file GMatrixT.hh
3  *
4  * Include file for a template matrix class.
5  */
6 //======================================================================
7 
8 #ifndef G_MATRIX_T_HH
9 #define G_MATRIX_T_HH
10 
11 #include "GGlobal.hh"
12 #include "GLogMessage.hh"
13 #include "GBaseFunctions.hh"
14 #include "GStringFunctions.hh"
15 
16 template <typename T> class GVectorT;
17 
18 //======================================================================
19 
20 /*! Template class defining a matrix for numerical types
21  *
22  * The basic matrix operations are defined, with the assumption that
23  * the standard algebaric operation of the template class are defined.
24  *
25  * For effective instantiation of a class, the following functions
26  * should be specialised (see file GMatrixD.hh):
27  * - (none)
28  *
29  * \note
30  * - the initialisation functions InitElement and InitData clear the
31  * elements memory with 0; if elements initialisation requires
32  * more sophisticated actions, due to class type, the template
33  * class must be derived.
34  */
35 template <typename T> class GMatrixT
36 {
37  //----------------------------------------------------------
39  //----------------------------------------------------------
40 
41  protected:
42  bool change_dim; ///< Indicates if dimensions can be changed
43  size_t nb_row; ///< Rows number
44  size_t nb_col; ///< Columns number
45  size_t dimension; ///< Total dimension
46  T * element; ///< Elements array
47 
48  public:
49  //----------------------------------------------------------
50  // Constructors / Affectation / Destructor
51 
52  GMatrixT<T> ( size_t nr = 1, size_t nc = 1 );
53  GMatrixT<T> ( size_t nr, size_t nc, const T & x );
54  GMatrixT<T> ( const GMatrixT<T> & m );
55 
56  GMatrixT<T> & operator = ( const GMatrixT<T> & m );
57 
58  virtual ~GMatrixT<T> ( );
59 
60  protected:
61 
62  //----------------------------------------------------------
63  // Initialisation functions
64 
65  virtual T * Allocate ( size_t nr, size_t nc );
66  virtual void Reset ( );
67 
68  public:
69  virtual void InitElement ( size_t i );
70  virtual void InitData ( );
71  virtual void InitData ( const T x );
72  virtual void InitData ( const T x[] );
73 
74  //----------------------------------------------------------
75  // Check functions
76  virtual bool CheckIndex ( size_t i, size_t j ) const;
77  virtual bool CheckIndex ( size_t k ) const;
78  virtual bool CheckDimensions ( const GMatrixT<T> & m ) const;
79  virtual bool CheckProduct ( const GMatrixT<T> & m ) const;
80  virtual bool CheckProduct ( const GVectorT<T> & v ) const;
81  virtual bool CheckDimChange ( ) const;
82 
83  //----------------------------------------------------------
84 
85  size_t GetRowsNumber ( ) const;
86  size_t GetColumnsNumber ( ) const;
87  size_t GetDimension ( ) const;
88  size_t SetDimension ( size_t nr, size_t nc );
89 
90  // Return the data array pointer.
91  const T * Data ( ) const;
92  T * Data ( );
93 
94  //----------------------------------------------------------
95  // Functions to get components
96 
97  size_t GetIndex ( size_t i, size_t j ) const;
98 
99  virtual const T & operator () ( size_t i, size_t j ) const;
100  virtual T & operator () ( size_t i, size_t j );
101 
102  GVectorT<T> GetRow ( size_t i );
103  GVectorT<T> GetColumn ( size_t j );
104 
105  virtual const T & operator [] ( size_t k ) const;
106  virtual T & operator [] ( size_t k );
107 
108  //----------------------------------------------------------
109  virtual void SetRow ( size_t i, const GVectorT<T> & v );
110  virtual void SetColumn ( size_t j, const GVectorT<T> & v );
111 
112  //----------------------------------------------------------
113  // Algebra
114 
115  // Addition / subtraction, scaling.
116  virtual GMatrixT<T> operator + ( const GMatrixT<T> & m ) const;
117  virtual GMatrixT<T> operator - ( const GMatrixT<T> & m ) const;
118  virtual GMatrixT<T> operator * ( const T k ) const;
119  virtual GMatrixT<T> operator / ( const T k ) const;
120 
121  virtual GMatrixT<T> & operator += ( const GMatrixT<T> & m );
122  virtual GMatrixT<T> & operator -= ( const GMatrixT<T> & m );
123  virtual GMatrixT<T> & operator *= ( const T k );
124  virtual GMatrixT<T> & operator /= ( const T k );
125 
126  // Unary minus.
127  virtual GMatrixT<T> operator - ( ) const;
128 
129  // Matrices product.
130  virtual GMatrixT<T> operator * ( const GMatrixT<T> & m ) const;
131  virtual GVectorT<T> operator * ( const GVectorT<T> & v ) const;
132 
133  // Transposition.
134  virtual GMatrixT<T> & Transpose ( );
135  virtual GMatrixT<T> GetTransposed ( ) const;
136 
137 };
138 
139 
140 //======================================================================
141 // Related functions
142 
143 template <typename T> GMatrixT<T> operator * ( const double k, const GMatrixT<T> & m );
144 
145 
146 //======================================================================
147 // required for template functions code
148 #include "GVectorT.hh"
149 
150 //----------------------------------------------------------------------
151 // Inline and template functions
152 #include "icc/GMatrixT.icc"
153 
154 
155 //======================================================================
156 #endif
virtual GMatrixT< T > & operator-=(const GMatrixT< T > &m)
Definition: GMatrixT.icc:384
const T * Data() const
Definition: GMatrixT.icc:225
virtual GMatrixT< T > GetTransposed() const
Definition: GMatrixT.icc:496
size_t SetDimension(size_t nr, size_t nc)
Definition: GMatrixT.icc:185
virtual GMatrixT< T > & operator/=(const T k)
Definition: GMatrixT.icc:405
virtual void InitData()
Definition: GMatrixT.icc:83
virtual GMatrixT< T > & operator+=(const GMatrixT< T > &m)
Definition: GMatrixT.icc:372
virtual const T & operator[](size_t k) const
Definition: GMatrixT.icc:274
size_t GetColumnsNumber() const
Definition: GMatrixT.icc:171
virtual GMatrixT< T > & Transpose()
Definition: GMatrixT.icc:468
virtual void SetRow(size_t i, const GVectorT< T > &v)
Definition: GMatrixT.icc:288
virtual void SetColumn(size_t j, const GVectorT< T > &v)
Definition: GMatrixT.icc:305
GVectorT< T > GetRow(size_t i)
Definition: GMatrixT.icc:254
#define GObject(T)
Definition: GClassDefine.hh:65
T * element
Elements array.
Definition: GMatrixT.hh:46
size_t GetDimension() const
Definition: GMatrixT.icc:175
virtual bool CheckProduct(const GMatrixT< T > &m) const
Definition: GMatrixT.icc:136
GVectorT< T > GetColumn(size_t j)
Definition: GMatrixT.icc:264
size_t nb_col
Columns number.
Definition: GMatrixT.hh:44
size_t dimension
Total dimension.
Definition: GMatrixT.hh:45
virtual GMatrixT< T > operator-() const
Definition: GMatrixT.icc:414
virtual GMatrixT< T > operator*(const T k) const
Definition: GMatrixT.icc:351
size_t GetRowsNumber() const
Definition: GMatrixT.icc:167
GMatrixT< T > & operator=(const GMatrixT< T > &m)
Definition: GMatrixT.icc:42
virtual T * Allocate(size_t nr, size_t nc)
Definition: GMatrixT.icc:59
bool change_dim
Indicates if dimensions can be changed.
Definition: GMatrixT.hh:42
virtual void InitElement(size_t i)
Definition: GMatrixT.icc:79
virtual bool CheckDimensions(const GMatrixT< T > &m) const
Definition: GMatrixT.icc:125
virtual GMatrixT< T > operator/(const T k) const
Definition: GMatrixT.icc:361
virtual GMatrixT< T > operator+(const GMatrixT< T > &m) const
Definition: GMatrixT.icc:325
virtual bool CheckIndex(size_t i, size_t j) const
Definition: GMatrixT.icc:103
virtual void Reset()
Definition: GMatrixT.icc:69
Definition: GMatrixT.hh:35
virtual const T & operator()(size_t i, size_t j) const
Definition: GMatrixT.icc:243
GRealSampleFFT operator*(double r, GRealSampleFFT &s)
Definition: GRealSampleFFT.icc:139
size_t nb_row
Rows number.
Definition: GMatrixT.hh:43
Definition: GMatrixT.hh:16
virtual bool CheckDimChange() const
Definition: GMatrixT.icc:156
size_t GetIndex(size_t i, size_t j) const
Definition: GMatrixT.icc:237
virtual GMatrixT< T > & operator*=(const T k)
Definition: GMatrixT.icc:396