7 public abstract class Matrix
\r
9 public abstract double this[int row, int col]
\r
15 public static Matrix operator +(Matrix m, double d)
\r
17 return new MatrixExpression;
\r
25 public class MatrixImplementation : Matrix
\r
27 internal double[] elements;
\r
28 readonly int nrow, ncol;
\r
30 public MatrixImplementation(int dnrow, int dncol)
\r
34 elements = new double[nrow * ncol];
\r
37 public override double this[int row, int col]
\r
41 return elements[(row - 1) * ncol + (col - 1)];
\r
45 elements[(row - 1) * ncol + (col - 1)] = value;
\r
50 public class MatrixExpression : Matrix
\r
52 MatrixImplementation imp;
\r
53 readonly int nrow, ncol;
\r
54 readonly int drow, dcol;
\r
56 public MatrixExpression(MatrixImplementation target, int ddrow, int ddcol, int dnrow, int dncol)
\r
65 public override double this[int row, int col]
\r
69 return imp.elements[(row - drow) * ncol + (col - dcol)];
\r
73 imp.elements[(row - drow) * ncol + (col - dcol)] = value;
\r