-package org.simantics.spreadsheet.graph.formula;
+package org.simantics.spreadsheet.solver.formula;
-import org.simantics.spreadsheet.graph.CellFormulaFunction;
-import org.simantics.spreadsheet.graph.CellValueVisitor;
-import org.simantics.spreadsheet.graph.SpreadsheetGraphUtils;
-import org.simantics.spreadsheet.graph.SpreadsheetMatrix;
-import org.simantics.spreadsheet.graph.parser.ast.AstArgList;
+import org.simantics.spreadsheet.SpreadsheetMatrix;
+import org.simantics.spreadsheet.Spreadsheets;
+import org.simantics.spreadsheet.solver.formula.parser.ast.AstArgList;
class SumifFormulaFunction implements CellFormulaFunction<Object> {
Object test = args.values.get(0).accept(visitor);
Object criteria = null;
try {
- criteria = args.values.get(1).accept(visitor);
+ criteria = args.values.get(1).accept(visitor);
} catch (IllegalStateException e){
- return 0;
+ return 0;
}
FormulaError2 error = FormulaError2.forObject(criteria);
if(error!=null) return error.getString();
-
+
if (test instanceof SpreadsheetMatrix) {
double sum = 0.0;
SpreadsheetMatrix tm = (SpreadsheetMatrix) test;
for (int i = 0; i < tm.values.length; i++) {
- if (SpreadsheetGraphUtils.matchCriteria(tm.values[i], criteria)) {
- double d = SpreadsheetGraphUtils.asNumber(tm.values[i]);
+ if (Spreadsheets.matchCriteria(tm.values[i], criteria)) {
+ double d = Spreadsheets.asNumber(tm.values[i]);
if (Double.isFinite(d))
sum += d;
}
}
return sum;
} else {
- Double d = SpreadsheetGraphUtils.asNumber(test);
+ Double d = Spreadsheets.asNumber(test);
return d;
}
}
Object test = args.values.get(0).accept(visitor);
Object criteria = null;
try {
- criteria = args.values.get(1).accept(visitor);
+ criteria = args.values.get(1).accept(visitor);
} catch (IllegalStateException e){
- return 0;
+ return 0;
}
FormulaError2 error = FormulaError2.forObject(criteria);
if(error!=null) return error.getString();
-
+
Object range = args.values.get(2).accept(visitor);
if (test instanceof SpreadsheetMatrix) {
SpreadsheetMatrix tm = (SpreadsheetMatrix) test;
SpreadsheetMatrix rm = (SpreadsheetMatrix) range;
for (int i = 0; i < tm.values.length; i++) {
- if (SpreadsheetGraphUtils.matchCriteria(tm.values[i], criteria)) {
- double d = SpreadsheetGraphUtils.asNumber(rm.values[i]);
+ if (Spreadsheets.matchCriteria(tm.values[i], criteria)) {
+ double d = Spreadsheets.asNumber(rm.values[i]);
if (Double.isFinite(d))
sum += d;
}
}
return sum;
} else {
- Double d = SpreadsheetGraphUtils.asNumber(test);
+ Double d = Spreadsheets.asNumber(test);
return d;
}