]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SpreadsheetMatrix.java
Changing existing log4j logging to use slf4j
[simantics/platform.git] / bundles / org.simantics.spreadsheet.graph / src / org / simantics / spreadsheet / graph / SpreadsheetMatrix.java
1 package org.simantics.spreadsheet.graph;\r
2 \r
3 import java.io.Serializable;\r
4 \r
5 import org.simantics.databoard.binding.mutable.Variant;\r
6 import org.simantics.spreadsheet.graph.formula.FormulaError2;\r
7 \r
8 public class SpreadsheetMatrix implements Serializable {\r
9 \r
10         private static final long serialVersionUID = 5729700370527844640L;\r
11         \r
12         private int w;\r
13         private int h;\r
14         public Object[] values;\r
15         \r
16         public SpreadsheetMatrix(int w, int h) {\r
17                 this.w = w;\r
18                 this.h = h;\r
19                 this.values = new Object[w*h];\r
20         }\r
21         \r
22         public Object get(int row, int column) {\r
23                 return values[w*row+column];\r
24         }\r
25         \r
26         public void set(int row, int column, Object value) {\r
27                 values[w*row+column] = value;\r
28         }\r
29 \r
30         public int getWidth() {\r
31                 return w;\r
32         }\r
33 \r
34         public int getHeight() {\r
35                 return h;\r
36         }\r
37         \r
38         public double sum() {\r
39                 double result = 0;\r
40                 for(int i=0;i<values.length;i++) {\r
41                         Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);\r
42                         if(n != null) result += n.doubleValue();\r
43                 }\r
44                 return result;\r
45         }\r
46         \r
47         public Object sumWithFormulaError(){\r
48                 Double result = 0.0;\r
49                 for(int i = 0; i < values.length; i++){\r
50                         Object obj = values[i];\r
51                         if(obj != null){\r
52                                 FormulaError2 error = FormulaError2.forObject(obj);\r
53                 if(error!=null) return error.getString();\r
54                     \r
55                 Number n = SpreadsheetGraphUtils.asValidNumber(obj);\r
56                                 if(n != null) result += n.doubleValue();\r
57                         }\r
58                 }\r
59                 return result;\r
60         }\r
61 \r
62         public double average() {\r
63                 double result = 0;\r
64                 double count = 0;\r
65                 for(int i=0;i<values.length;i++) {\r
66                         Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);\r
67                         if(n != null) {\r
68                                 result += n.doubleValue();\r
69                                 count++;\r
70                         }\r
71                 }\r
72                 if(count == 0) return result;\r
73                 return result / count;\r
74         }\r
75         \r
76         public double countOfActualDoubleValues(){\r
77                 double count = 0.0;\r
78                 for(int i = 0; i < values.length; i++){\r
79                         Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);\r
80                         if(n!=null) count++;\r
81                 }\r
82                 return count;\r
83         }\r
84         \r
85         public Object productWithFormulaError(){\r
86                 Double result = 1.0;\r
87                 boolean atLeastOne = false;\r
88                 for(int i = 0; i < values.length; i++){\r
89                         Object obj = values[i];\r
90                         if(obj != null){\r
91                                 FormulaError2 error = FormulaError2.forObject(obj);\r
92                         if(error!=null) return error.getString();\r
93                         \r
94                                 Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);\r
95                                 if(n != null) {\r
96                                         double dval = n.doubleValue();\r
97                                         if(dval<=0) return FormulaError2.NUM.getString();\r
98                                         result = result*dval;\r
99                                         atLeastOne = true;\r
100                                 }\r
101                         }\r
102                 }\r
103                 if(atLeastOne) return result;\r
104                 else return 0.0;\r
105         }\r
106         \r
107         public SpreadsheetMatrix pow(Object exponent_) {\r
108                 if(exponent_ instanceof SpreadsheetMatrix) {\r
109                         SpreadsheetMatrix exponent = (SpreadsheetMatrix)exponent_;\r
110                         SpreadsheetMatrix result = new SpreadsheetMatrix(exponent.w, h);\r
111                         for(int i=0;i<h;i++) {\r
112                                 for(int j=0;j<exponent.w;j++) {\r
113                                         result.set(i,j, Math.pow(SpreadsheetGraphUtils.asNumber(get(i, 0)),\r
114                                                         SpreadsheetGraphUtils.asNumber(exponent.get(0, j))));\r
115                                 }\r
116                         }\r
117                         return result;\r
118                 } else {\r
119                         double n = SpreadsheetGraphUtils.asNumber(exponent_);\r
120                         SpreadsheetMatrix result = new SpreadsheetMatrix(w, h);\r
121                         for(int i=0;i<result.values.length;i++) {\r
122                                 result.values[i] = Math.pow(SpreadsheetGraphUtils.asNumber(values[i]), n);\r
123                         }\r
124                         return result;\r
125                 }\r
126         }\r
127         \r
128         \r
129 }