OSDN Git Service

slider
[psychlops/silverlight.git] / dev3 / psychlops / core / math / matrix.cs
1 using System;\r
2 \r
3 namespace Psychlops\r
4 {\r
5 \r
6 \r
7         public abstract class Matrix\r
8         {\r
9                 public abstract double this[int row, int col]\r
10                 {\r
11                         get;\r
12                         set;\r
13                 }\r
14 \r
15                 /*\r
16                 public static Matrix operator +(Matrix m, double d)\r
17                 {\r
18                         return new Internal.MatrixExpression();\r
19                 }\r
20                 */\r
21         }\r
22 \r
23 \r
24         namespace Internal\r
25         {\r
26 \r
27                 public class MatrixImplementation : Matrix\r
28                 {\r
29                         internal double[] elements;\r
30                         readonly int nrow, ncol;\r
31 \r
32                         public MatrixImplementation(int dnrow, int dncol)\r
33                         {\r
34                                 nrow = dnrow;\r
35                                 ncol = dncol;\r
36                                 elements = new double[nrow * ncol];\r
37                         }\r
38 \r
39                         public override double this[int row, int col]\r
40                         {\r
41                                 get\r
42                                 {\r
43                                         return elements[(row - 1) * ncol + (col - 1)];\r
44                                 }\r
45                                 set\r
46                                 {\r
47                                         elements[(row - 1) * ncol + (col - 1)] = value;\r
48                                 }\r
49                         }\r
50                 }\r
51 \r
52                 public class MatrixExpression : Matrix\r
53                 {\r
54                         MatrixImplementation imp;\r
55                         readonly int nrow, ncol;\r
56                         readonly int drow, dcol;\r
57                         \r
58                         public MatrixExpression(MatrixImplementation target, int ddrow, int ddcol, int dnrow, int dncol)\r
59                         {\r
60                                 nrow = dnrow;\r
61                                 ncol = dncol;\r
62                                 drow = ddrow;\r
63                                 dcol = ddcol;\r
64                                 imp = target;\r
65                         }\r
66 \r
67                         public override double this[int row, int col]\r
68                         {\r
69                                 get\r
70                                 {\r
71                                         return imp.elements[(row - drow) * ncol + (col - dcol)];\r
72                                 }\r
73                                 set\r
74                                 {\r
75                                         imp.elements[(row - drow) * ncol + (col - dcol)] = value;\r
76                                 }\r
77                         }\r
78                 }\r
79         }\r
80 \r
81 }