OSDN Git Service

5
[psychlops/silverlight.git] / dev4 / 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 abstract Internal.MatrixExpression this[Interval row, Interval col]\r
17                 {\r
18                         get;\r
19                         set;\r
20                 }\r
21 \r
22 \r
23                 /*\r
24                 public static Matrix operator +(Matrix m, double d)\r
25                 {\r
26                         return new Internal.MatrixExpression();\r
27                 }\r
28                 */\r
29 \r
30                 public abstract int rows { get; }\r
31                 public abstract int cols { get; }\r
32                 public int getRows() { return rows; }\r
33                 public int getCols() { return cols; }\r
34 \r
35         }\r
36 \r
37 \r
38         namespace Internal\r
39         {\r
40 \r
41                 public class MatrixImplementation : Matrix\r
42                 {\r
43                         internal double[,] elements;\r
44 \r
45                         public MatrixImplementation(int dnrow, int dncol)\r
46                         {\r
47                                 elements = new double[dnrow, dncol];\r
48                         }\r
49 \r
50                         public override double this[int row, int col]\r
51                         {\r
52                                 get\r
53                                 {\r
54                                         return elements[row - 1, col - 1];\r
55                                 }\r
56                                 set\r
57                                 {\r
58                                         elements[row - 1, col - 1] = value;\r
59                                 }\r
60                         }\r
61                         /*\r
62                         public override MatrixExpression this[Interval row, Interval col]\r
63                         {\r
64                                 get\r
65                                 {\r
66                                         return new MatrixExpression(this, row.int_floor(), col.int_floor(), row.int_ceil(), col.int_ceil());\r
67                                 }\r
68                                 set\r
69                                 {\r
70                                         for(int r = 0, r<)\r
71                                         elements[row - 1, col - 1] = value;\r
72                                 }\r
73                         }\r
74                          * */\r
75 \r
76                         public override int rows { get { return elements.GetLength(0); } }\r
77                         public override int cols { get { return elements.GetLength(1); } }\r
78 \r
79                 }\r
80 \r
81                 public class MatrixExpression : Matrix\r
82                 {\r
83                         MatrixImplementation imp;\r
84                         readonly int brow, bcol;\r
85                         readonly int erow, ecol;\r
86 \r
87                         internal MatrixExpression(MatrixImplementation target, int dbrow, int dbcol, int derow, int decol)\r
88                         {\r
89                                 brow = dbrow;\r
90                                 bcol = dbcol;\r
91                                 erow = derow;\r
92                                 ecol = decol;\r
93                                 imp = target;\r
94                         }\r
95 \r
96                         public override double this[int row, int col]\r
97                         {\r
98                                 get\r
99                                 {\r
100                                         return imp.elements[(row - 1 - brow), (col - 1 - bcol)];\r
101                                 }\r
102                                 set\r
103                                 {\r
104                                         imp.elements[(row - 1 - brow), (col - 1 - bcol)] = value;\r
105                                 }\r
106                         }\r
107 \r
108                         public override int rows { get { return erow - brow + 1; } }\r
109                         public override int cols { get { return ecol - bcol + 1; } }\r
110                 }\r
111         }\r
112 \r
113 }