7 public abstract class Matrix
\r
9 public abstract double this[int row, int col]
\r
16 public static Matrix operator +(Matrix m, double d)
\r
18 return new Internal.MatrixExpression();
\r
27 public class MatrixImplementation : Matrix
\r
29 internal double[] elements;
\r
30 readonly int nrow, ncol;
\r
32 public MatrixImplementation(int dnrow, int dncol)
\r
36 elements = new double[nrow * ncol];
\r
39 public override double this[int row, int col]
\r
43 return elements[(row - 1) * ncol + (col - 1)];
\r
47 elements[(row - 1) * ncol + (col - 1)] = value;
\r
52 public class MatrixExpression : Matrix
\r
54 MatrixImplementation imp;
\r
55 readonly int nrow, ncol;
\r
56 readonly int drow, dcol;
\r
58 public MatrixExpression(MatrixImplementation target, int ddrow, int ddcol, int dnrow, int dncol)
\r
67 public override double this[int row, int col]
\r
71 return imp.elements[(row - drow) * ncol + (col - dcol)];
\r
75 imp.elements[(row - drow) * ncol + (col - dcol)] = value;
\r