Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends
Matrix< T > Class Template Reference

#include <ftmpl_matrix.h>

Public Member Functions

 Matrix ()
 
 Matrix (int nr, int nc)
 
 Matrix (const Matrix< T > &M)
 
 ~Matrix ()
 
Matrix< T > & operator= (const Matrix< T > &M)
 
int rows () const
 
int columns () const
 
SubMatrix< Toperator[] (int i)
 
const SubMatrix< Toperator[] (int i) const
 
Toperator() (int row, int col)
 
T operator() (int row, int col) const
 
SubMatrix< Toperator() (int rmin, int rmax, int cmin, int cmax)
 
const SubMatrix< Toperator() (int rmin, int rmax, int cmin, int cmax) const
 
void swapRow (int i, int j)
 
void swapColumn (int i, int j)
 
void print (OSTREAM &s) const
 

Private Types

typedef TT_ptr
 

Private Member Functions

void printrow (OSTREAM &s, int i) const
 

Private Attributes

int NR
 
int NC
 
T ** elems
 

Friends

class SubMatrix< T >
 
OSTREAMoperator (OSTREAM &s, const Matrix< T > &M)
 

Detailed Description

template<class T>
class Matrix< T >

Definition at line 20 of file ftmpl_matrix.h.

Member Typedef Documentation

◆ T_ptr

template<class T>
typedef T* Matrix< T >::T_ptr
private

Definition at line 36 of file ftmpl_matrix.h.

Constructor & Destructor Documentation

◆ Matrix() [1/3]

template<class T>
Matrix< T >::Matrix ( )
inline

Definition at line 38 of file ftmpl_matrix.h.

38 : NR(0), NC(0), elems(0) {}
T ** elems
Definition: ftmpl_matrix.h:32
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31

◆ Matrix() [2/3]

template<class T >
Matrix< T >::Matrix ( int  nr,
int  nc 
)

Definition at line 6 of file ftmpl_matrix.cc.

6  : NR(nr), NC(nc)
7 {
8  ASSERT( (nr > 0 && nc > 0) || (nr == 0 && nc == 0), "illegal index" );
9  if ( nr == 0 )
10  elems = 0;
11  else {
12  int i;
13  elems = new T_ptr[nr];
14  for ( i = 0; i < nr; i++ )
15  elems[i] = new T[nc];
16  }
17 }
T ** elems
Definition: ftmpl_matrix.h:32
int i
Definition: cfEzgcd.cc:125
T * T_ptr
Definition: ftmpl_matrix.h:36
#define ASSERT(expression, message)
Definition: cf_assert.h:99
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31
STATIC_VAR jList * T
Definition: janet.cc:30

◆ Matrix() [3/3]

template<class T >
Matrix< T >::Matrix ( const Matrix< T > &  M)

Definition at line 20 of file ftmpl_matrix.cc.

20  : NR(M.NR), NC(M.NC)
21 {
22  if ( NR == 0 )
23  elems = 0;
24  else {
25  int i, j;
26  elems = new T_ptr[NR];
27  for ( i = 0; i < NR; i++ ) {
28  elems[i] = new T[NC];
29  for ( j = 0; j < NC; j++ )
30  elems[i][j] = M.elems[i][j];
31  }
32  }
33 }
int j
Definition: facHensel.cc:105
T ** elems
Definition: ftmpl_matrix.h:32
int i
Definition: cfEzgcd.cc:125
T * T_ptr
Definition: ftmpl_matrix.h:36
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31
STATIC_VAR jList * T
Definition: janet.cc:30

◆ ~Matrix()

template<class T >
Matrix< T >::~Matrix ( )

Definition at line 36 of file ftmpl_matrix.cc.

37 {
38  if ( elems != 0 ) {
39  int i;
40  for ( i = 0; i < NR; i++ )
41  delete [] elems[i];
42  delete [] elems;
43  }
44 }
T ** elems
Definition: ftmpl_matrix.h:32
int i
Definition: cfEzgcd.cc:125
int NR
Definition: ftmpl_matrix.h:31

Member Function Documentation

◆ columns()

template<class T>
int Matrix< T >::columns ( ) const
inline

Definition at line 44 of file ftmpl_matrix.h.

44 { return NC; }
int NC
Definition: ftmpl_matrix.h:31

◆ operator()() [1/4]

template<class T >
T & Matrix< T >::operator() ( int  row,
int  col 
)

Definition at line 82 of file ftmpl_matrix.cc.

83 {
84  ASSERT( row > 0 && col > 0 && row <= NR && col <= NC, "illegal index" );
85  return elems[row-1][col-1];
86 }
T ** elems
Definition: ftmpl_matrix.h:32
#define ASSERT(expression, message)
Definition: cf_assert.h:99
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31

◆ operator()() [2/4]

template<class T >
T Matrix< T >::operator() ( int  row,
int  col 
) const

Definition at line 89 of file ftmpl_matrix.cc.

90 {
91  ASSERT( row > 0 && col > 0 && row <= NR && col <= NC, "illegal index" );
92  return elems[row-1][col-1];
93 }
T ** elems
Definition: ftmpl_matrix.h:32
#define ASSERT(expression, message)
Definition: cf_assert.h:99
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31

◆ operator()() [3/4]

template<class T >
SubMatrix< T > Matrix< T >::operator() ( int  rmin,
int  rmax,
int  cmin,
int  cmax 
)

Definition at line 96 of file ftmpl_matrix.cc.

97 {
98  ASSERT( rmin > 0 && rmax <= NR && rmin <= rmax && cmin > 0 && cmax <= NC && cmin <= cmax , "illegal index" );
99  return SubMatrix<T>( rmin, rmax, cmin, cmax, *this );
100 }
#define ASSERT(expression, message)
Definition: cf_assert.h:99
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31

◆ operator()() [4/4]

template<class T >
const SubMatrix< T > Matrix< T >::operator() ( int  rmin,
int  rmax,
int  cmin,
int  cmax 
) const

Definition at line 103 of file ftmpl_matrix.cc.

104 {
105  ASSERT( rmin > 0 && rmax <= NR && rmin <= rmax && cmin > 0 && cmax <= NC && cmin <= cmax , "illegal index" );
106  return SubMatrix<T>( rmin, rmax, cmin, cmax, *this );
107 }
#define ASSERT(expression, message)
Definition: cf_assert.h:99
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31

◆ operator=()

template<class T >
Matrix< T > & Matrix< T >::operator= ( const Matrix< T > &  M)

Definition at line 47 of file ftmpl_matrix.cc.

48 {
49  if ( this != &M ) {
50  int i, j;
51  if ( NR != M.NR || NC != M.NC ) {
52  for ( i = 0; i < NR; i++ )
53  delete [] elems[i];
54  delete [] elems;
55  NR = M.NR; NC = M.NC;
56  elems = new T_ptr[NR];
57  for ( i = 0; i < NR; i++ )
58  elems[i] = new T[NC];
59  }
60  for ( i = 0; i < NR; i++ )
61  for ( j = 0; j < NC; j++ )
62  elems[i][j] = M.elems[i][j];
63  }
64  return *this;
65 }
int j
Definition: facHensel.cc:105
T ** elems
Definition: ftmpl_matrix.h:32
int i
Definition: cfEzgcd.cc:125
T * T_ptr
Definition: ftmpl_matrix.h:36
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31
STATIC_VAR jList * T
Definition: janet.cc:30

◆ operator[]() [1/2]

template<class T >
SubMatrix< T > Matrix< T >::operator[] ( int  i)

Definition at line 68 of file ftmpl_matrix.cc.

69 {
70  ASSERT( i > 0 && i <= NR, "illegal index" );
71  return SubMatrix<T>( i, i, 1, NC, *this );
72 }
int i
Definition: cfEzgcd.cc:125
#define ASSERT(expression, message)
Definition: cf_assert.h:99
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31

◆ operator[]() [2/2]

template<class T >
const SubMatrix< T > Matrix< T >::operator[] ( int  i) const

Definition at line 75 of file ftmpl_matrix.cc.

76 {
77  ASSERT( i > 0 && i <= NR, "illegal index" );
78  return SubMatrix<T>( i, i, 1, NC, *this );
79 }
int i
Definition: cfEzgcd.cc:125
#define ASSERT(expression, message)
Definition: cf_assert.h:99
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31

◆ print()

template<class T >
void Matrix< T >::print ( OSTREAM s) const

Definition at line 147 of file ftmpl_matrix.cc.

148 {
149  if ( NR == 0 )
150  s << "( )";
151  else if ( NR == 1 ) {
152  s << "( ";
153  printrow( s, 0 );
154  s << " )";
155  }
156  else {
157  int i;
158  s << "(\n";
159  printrow( s, 0 );
160  for ( i = 1; i < NR; i++ ) {
161  s << ",\n";
162  printrow( s, i );
163  }
164  s << "\n)";
165  }
166 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
void printrow(OSTREAM &s, int i) const
int i
Definition: cfEzgcd.cc:125
int NR
Definition: ftmpl_matrix.h:31

◆ printrow()

template<class T >
void Matrix< T >::printrow ( OSTREAM s,
int  i 
) const
private

Definition at line 138 of file ftmpl_matrix.cc.

139 {
140  s << "( " << elems[i][0];
141  for ( int j = 1; j < NC; j++ )
142  s << ", " << elems[i][j];
143  s << " )";
144 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
int j
Definition: facHensel.cc:105
T ** elems
Definition: ftmpl_matrix.h:32
int i
Definition: cfEzgcd.cc:125
int NC
Definition: ftmpl_matrix.h:31

◆ rows()

template<class T>
int Matrix< T >::rows ( ) const
inline

Definition at line 43 of file ftmpl_matrix.h.

43 { return NR; }
int NR
Definition: ftmpl_matrix.h:31

◆ swapColumn()

template<class T >
void Matrix< T >::swapColumn ( int  i,
int  j 
)

Definition at line 122 of file ftmpl_matrix.cc.

123 {
124  ASSERT( i > 0 && i <= NC && j > 0 && j <= NC, "illegal index" );
125  if ( i != j ) {
126  int k;
127  i--; j--;
128  for ( k = 0; k < NR; k++ ) {
129  T h = elems[k][i];
130  elems[k][i] = elems[k][j];
131  elems[k][j] = h;
132  }
133  }
134 }
int j
Definition: facHensel.cc:105
T ** elems
Definition: ftmpl_matrix.h:32
int k
Definition: cfEzgcd.cc:92
int i
Definition: cfEzgcd.cc:125
STATIC_VAR Poly * h
Definition: janet.cc:971
#define ASSERT(expression, message)
Definition: cf_assert.h:99
int NC
Definition: ftmpl_matrix.h:31
int NR
Definition: ftmpl_matrix.h:31
STATIC_VAR jList * T
Definition: janet.cc:30

◆ swapRow()

template<class T >
void Matrix< T >::swapRow ( int  i,
int  j 
)

Definition at line 110 of file ftmpl_matrix.cc.

111 {
112  ASSERT( i > 0 && i <= NR && j > 0 && j <= NR, "illegal index" );
113  if ( i != j ) {
114  i--; j--;
115  T * h = elems[i];
116  elems[i] = elems[j];
117  elems[j] = h;
118  }
119 }
int j
Definition: facHensel.cc:105
T ** elems
Definition: ftmpl_matrix.h:32
int i
Definition: cfEzgcd.cc:125
STATIC_VAR Poly * h
Definition: janet.cc:971
#define ASSERT(expression, message)
Definition: cf_assert.h:99
int NR
Definition: ftmpl_matrix.h:31
STATIC_VAR jList * T
Definition: janet.cc:30

Friends And Related Function Documentation

◆ operator

template<class T>
OSTREAM& operator ( OSTREAM s,
const Matrix< T > &  M 
)
friend

◆ SubMatrix< T >

template<class T>
friend class SubMatrix< T >
friend

Definition at line 57 of file ftmpl_matrix.h.

Field Documentation

◆ elems

template<class T>
T** Matrix< T >::elems
private

Definition at line 32 of file ftmpl_matrix.h.

◆ NC

template<class T>
int Matrix< T >::NC
private

Definition at line 31 of file ftmpl_matrix.h.

◆ NR

template<class T>
int Matrix< T >::NR
private

Definition at line 31 of file ftmpl_matrix.h.


The documentation for this class was generated from the following files: