OSDN Git Service

slider
[psychlops/silverlight.git] / dev3 / psychlops / core / math / matrix.cs
index fd67eb0..9bd895f 100644 (file)
@@ -3,4 +3,79 @@
 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 static Matrix operator +(Matrix m, double d)\r
+               {\r
+                       return new Internal.MatrixExpression();\r
+               }\r
+               */\r
+       }\r
+\r
+\r
+       namespace Internal\r
+       {\r
+\r
+               public class MatrixImplementation : Matrix\r
+               {\r
+                       internal double[] elements;\r
+                       readonly int nrow, ncol;\r
+\r
+                       public MatrixImplementation(int dnrow, int dncol)\r
+                       {\r
+                               nrow = dnrow;\r
+                               ncol = dncol;\r
+                               elements = new double[nrow * ncol];\r
+                       }\r
+\r
+                       public override double this[int row, int col]\r
+                       {\r
+                               get\r
+                               {\r
+                                       return elements[(row - 1) * ncol + (col - 1)];\r
+                               }\r
+                               set\r
+                               {\r
+                                       elements[(row - 1) * ncol + (col - 1)] = value;\r
+                               }\r
+                       }\r
+               }\r
+\r
+               public class MatrixExpression : Matrix\r
+               {\r
+                       MatrixImplementation imp;\r
+                       readonly int nrow, ncol;\r
+                       readonly int drow, dcol;\r
+                       \r
+                       public MatrixExpression(MatrixImplementation target, int ddrow, int ddcol, int dnrow, int dncol)\r
+                       {\r
+                               nrow = dnrow;\r
+                               ncol = dncol;\r
+                               drow = ddrow;\r
+                               dcol = ddcol;\r
+                               imp = target;\r
+                       }\r
+\r
+                       public override double this[int row, int col]\r
+                       {\r
+                               get\r
+                               {\r
+                                       return imp.elements[(row - drow) * ncol + (col - dcol)];\r
+                               }\r
+                               set\r
+                               {\r
+                                       imp.elements[(row - drow) * ncol + (col - dcol)] = value;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
 }
\ No newline at end of file