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