OSDN Git Service

misc
[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                 public static Matrix operator +(Matrix m, double d)\r
16                 {\r
17                         return new MatrixExpression;\r
18                 }\r
19         }\r
20 \r
21 \r
22         namespace Internal\r
23         {\r
24 \r
25                 public class MatrixImplementation : Matrix\r
26                 {\r
27                         internal double[] elements;\r
28                         readonly int nrow, ncol;\r
29 \r
30                         public MatrixImplementation(int dnrow, int dncol)\r
31                         {\r
32                                 nrow = dnrow;\r
33                                 ncol = dncol;\r
34                                 elements = new double[nrow * ncol];\r
35                         }\r
36 \r
37                         public override double this[int row, int col]\r
38                         {\r
39                                 get\r
40                                 {\r
41                                         return elements[(row - 1) * ncol + (col - 1)];\r
42                                 }\r
43                                 set\r
44                                 {\r
45                                         elements[(row - 1) * ncol + (col - 1)] = value;\r
46                                 }\r
47                         }\r
48                 }\r
49 \r
50                 public class MatrixExpression : Matrix\r
51                 {\r
52                         MatrixImplementation imp;\r
53                         readonly int nrow, ncol;\r
54                         readonly int drow, dcol;\r
55                         \r
56                         public MatrixExpression(MatrixImplementation target, int ddrow, int ddcol, int dnrow, int dncol)\r
57                         {\r
58                                 nrow = dnrow;\r
59                                 ncol = dncol;\r
60                                 drow = ddrow;\r
61                                 dcol = ddcol;\r
62                                 imp = target;\r
63                         }\r
64 \r
65                         public override double this[int row, int col]\r
66                         {\r
67                                 get\r
68                                 {\r
69                                         return imp.elements[(row - drow) * ncol + (col - dcol)];\r
70                                 }\r
71                                 set\r
72                                 {\r
73                                         imp.elements[(row - drow) * ncol + (col - dcol)] = value;\r
74                                 }\r
75                         }\r
76                 }\r
77         }\r
78 \r
79 }