OSDN Git Service

5
[psychlops/silverlight.git] / dev4 / psychlops / core / math / matrix.cs
diff --git a/dev4/psychlops/core/math/matrix.cs b/dev4/psychlops/core/math/matrix.cs
new file mode 100644 (file)
index 0000000..de4a836
--- /dev/null
@@ -0,0 +1,113 @@
+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