OSDN Git Service

3 to 4
[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..9bd895f
--- /dev/null
@@ -0,0 +1,81 @@
+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 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