Website Summary Files Commits Branches @commit @diff @stats
path: root / src / Models / CellFormula.cpp
diff options
context:
space:
mode:
1 files changed, 13 insertions, 1 deletions
-rw-r--r--src/Models/CellFormula.cpp14
diff --git a/src/Models/CellFormula.cpp b/src/Models/CellFormula.cpp
index 2c28d4b..7f45c2e 100644
--- a/src/Models/CellFormula.cpp
+++ b/src/Models/CellFormula.cpp
@@ -1,9 +1,21 @@
#include "CellFormula.h"
+#include "CellDouble.h"
#include <cstring>
double CellFormula::calculate(unsigned index) {
+ double lval = CellDouble(formula[index].left->getValue()).getValue();
+
switch(formula[index].right) {
- case none: return formula[index].left;
+ plus: return lval + calculate(index++);
+ minus: return lval - calculate(index++);
+ mult: return lval * calculate(index++);
+ div: return lval / calculate(index++);
+ pow:
+ double power = calculate(index++);
+ for (unsigned i = 0; i < power; i++)
+ lval *= lval;
+ none:
+ default: return lval;
}
}