8 ASSERT( (nr > 0 && nc > 0) || (nr == 0 && nc == 0),
"illegal index" );
14 for ( i = 0; i < nr; i++ )
27 for ( i = 0; i <
NR; i++ ) {
29 for ( j = 0; j <
NC; j++ )
40 for ( i = 0; i <
NR; i++ )
52 for ( i = 0; i <
NR; i++ )
57 for ( i = 0; i <
NR; i++ )
60 for ( i = 0; i <
NR; i++ )
61 for ( j = 0; j <
NC; j++ )
70 ASSERT( i > 0 && i <=
NR,
"illegal index" );
77 ASSERT( i > 0 && i <=
NR,
"illegal index" );
84 ASSERT( row > 0 && col > 0 && row <=
NR && col <=
NC,
"illegal index" );
85 return elems[row-1][col-1];
91 ASSERT( row > 0 && col > 0 && row <=
NR && col <=
NC,
"illegal index" );
92 return elems[row-1][col-1];
98 ASSERT( rmin > 0 && rmax <=
NR && rmin <= rmax && cmin > 0 && cmax <=
NC && cmin <= cmax ,
"illegal index" );
105 ASSERT( rmin > 0 && rmax <=
NR && rmin <= rmax && cmin > 0 && cmax <=
NC && cmin <= cmax ,
"illegal index" );
112 ASSERT( i > 0 && i <= NR && j > 0 && j <=
NR,
"illegal index" );
124 ASSERT( i > 0 && i <= NC && j > 0 && j <=
NC,
"illegal index" );
128 for ( k = 0; k <
NR; k++ ) {
141 for (
int j = 1;
j <
NC;
j++ )
142 s <<
", " << elems[i][
j];
151 else if (
NR == 1 ) {
160 for ( i = 1; i <
NR; i++ ) {
240 if (
M.elems != S.
elems ) {
242 for ( i = 0; i < S.
NR; i++ )
243 for ( j = 0; j < S.
NC; j++ )
256 if (
M.elems == S.
M.elems ) {
257 if ( r_min < S.
r_min ) {
258 for ( i = 0; i < n; i++ )
259 for ( j = 0; j <
m; j++ )
260 M.elems[r_min+i-1][c_min+j-1] = S.
M.elems[S.
r_min+i-1][S.
c_min+j-1];
262 else if ( r_min > S.
r_min ) {
263 for ( i = n-1; i >= 0; i-- )
264 for ( j = 0; j <
m; j++ )
265 M.elems[r_min+i-1][c_min+j-1] = S.
M.elems[S.
r_min+i-1][S.
c_min+j-1];
267 else if ( c_min < S.
c_min ) {
268 for ( j = 0; j <
m; j++ )
269 for ( i = 0; i < n; i++ )
270 M.elems[r_min+i-1][c_min+j-1] = S.
M.elems[S.
r_min+i-1][S.
c_min+j-1];
272 else if ( c_min > S.
c_min ) {
273 for ( j = m-1; j >= 0; j-- )
274 for ( i = 0; i < n; i++ )
275 M.elems[r_min+i-1][c_min+j-1] = S.
M.elems[S.
r_min+i-1][S.
c_min+j-1];
279 for ( i = 0; i < n; i++ )
280 for ( j = 0; j <
m; j++ )
281 M.elems[r_min+i-1][c_min+j-1] = S.
M.elems[S.
r_min+i-1][S.
c_min+j-1];
292 for ( i = 0; i < n; i++ )
293 for ( j = 0; j <
m; j++ )
294 res.
elems[i][j] =
M.elems[r_min+i-1][c_min+j-1];
302 return M.elems[
r_min-1][i-1];
309 return M.elems[
r_min-1][i-1];
314 OSTREAM & operator<< ( OSTREAM & s, const Matrix<T>&
M )
const CanonicalForm int s
void printrow(OSTREAM &s, int i) const
Matrix< T > & operator=(const Matrix< T > &M)
SubMatrix< T > operator[](int i)
T operator[](int i) const
void swapColumn(int i, int j)
void swapRow(int i, int j)
T & operator()(int row, int col)
void print(OSTREAM &s) const
SubMatrix(int rmin, int rmax, int cmin, int cmax, const Matrix< T > &m)
#define ASSERT(expression, message)
SubMatrix< T > & operator=(const SubMatrix< T > &S)