--- /dev/null
+using System;\r
+\r
+namespace Psychlops\r
+{\r
+\r
+\r
+ public abstract class Matrix\r
+ {\r
+ public abstract double this[int row, int col]\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ /*\r
+ public abstract Internal.MatrixExpression this[Interval row, Interval col]\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+\r
+ /*\r
+ public static Matrix operator +(Matrix m, double d)\r
+ {\r
+ return new Internal.MatrixExpression();\r
+ }\r
+ */\r
+\r
+ public abstract int rows { get; }\r
+ public abstract int cols { get; }\r
+ public int getRows() { return rows; }\r
+ public int getCols() { return cols; }\r
+\r
+ }\r
+\r
+\r
+ namespace Internal\r
+ {\r
+\r
+ public class MatrixImplementation : Matrix\r
+ {\r
+ internal double[,] elements;\r
+\r
+ public MatrixImplementation(int dnrow, int dncol)\r
+ {\r
+ elements = new double[dnrow, dncol];\r
+ }\r
+\r
+ public override double this[int row, int col]\r
+ {\r
+ get\r
+ {\r
+ return elements[row - 1, col - 1];\r
+ }\r
+ set\r
+ {\r
+ elements[row - 1, col - 1] = value;\r
+ }\r
+ }\r
+ /*\r
+ public override MatrixExpression this[Interval row, Interval col]\r
+ {\r
+ get\r
+ {\r
+ return new MatrixExpression(this, row.int_floor(), col.int_floor(), row.int_ceil(), col.int_ceil());\r
+ }\r
+ set\r
+ {\r
+ for(int r = 0, r<)\r
+ elements[row - 1, col - 1] = value;\r
+ }\r
+ }\r
+ * */\r
+\r
+ public override int rows { get { return elements.GetLength(0); } }\r
+ public override int cols { get { return elements.GetLength(1); } }\r
+\r
+ }\r
+\r
+ public class MatrixExpression : Matrix\r
+ {\r
+ MatrixImplementation imp;\r
+ readonly int brow, bcol;\r
+ readonly int erow, ecol;\r
+\r
+ internal MatrixExpression(MatrixImplementation target, int dbrow, int dbcol, int derow, int decol)\r
+ {\r
+ brow = dbrow;\r
+ bcol = dbcol;\r
+ erow = derow;\r
+ ecol = decol;\r
+ imp = target;\r
+ }\r
+\r
+ public override double this[int row, int col]\r
+ {\r
+ get\r
+ {\r
+ return imp.elements[(row - 1 - brow), (col - 1 - bcol)];\r
+ }\r
+ set\r
+ {\r
+ imp.elements[(row - 1 - brow), (col - 1 - bcol)] = value;\r
+ }\r
+ }\r
+\r
+ public override int rows { get { return erow - brow + 1; } }\r
+ public override int cols { get { return ecol - bcol + 1; } }\r
+ }\r
+ }\r
+\r
+}
\ No newline at end of file