Website Summary Files Commits Branches @commit @diff @stats
path: root / src / Models / CellFormula.cpp
diff options
context:
space:
mode:
Commit63a04433aaf4585181598f10398e41dc9801292e (patch)
Author
 Syndamia <kamen@syndamia.com>
2022-05-28 19:54:54 +0300
Committer
 Syndamia <kamen@syndamia.com>
2022-05-28 19:54:54 +0300
Filesc7bfa02b244f89d898148a645820d07acac611c3 /src/Models/CellFormula.cpp
FMI-OOP-P2_Tables-63a04433aaf4585181598f10398e41dc9801292e.tar
FMI-OOP-P2_Tables-63a04433aaf4585181598f10398e41dc9801292e.tar.gz
FMI-OOP-P2_Tables-63a04433aaf4585181598f10398e41dc9801292e.zip
Parent31b78420ad5d7a5fd9596bba961ed554b9c38838 (diff)
Autocommit at 28.05.2022 @ 19:54
1 files changed, 34 insertions, 32 deletions
-rw-r--r--src/Models/CellFormula.cpp66
diff --git a/src/Models/CellFormula.cpp b/src/Models/CellFormula.cpp
index 69a08f9..7ff8c9f 100644
--- a/src/Models/CellFormula.cpp
+++ b/src/Models/CellFormula.cpp
@@ -12,9 +12,9 @@ double CellFormula::calculate(unsigned index) {
if (formula[index].right < 0) {
switch (-formula[index++].right) {
- case '+' : lval += formula[index].left->getNumeralValue(); break;
- case '-' : lval -= formula[index].left->getNumeralValue(); break;
- case '*': lval *= formula[index].left->getNumeralValue(); break;
+ case '+' : lval += formula[index].left->getNumeralValue(); break;
+ case '-' : lval -= formula[index].left->getNumeralValue(); break;
+ case '*' : lval *= formula[index].left->getNumeralValue(); break;
case '/' : lval /= formula[index].left->getNumeralValue(); break;
// case pow : lval += formula[index].left->getNumeralValue(); break;
}
@@ -22,12 +22,12 @@ double CellFormula::calculate(unsigned index) {
switch(formula[index].right) {
case '+' : return lval + calculate(index++);
- case '-' : return lval - calculate(index++);
+ case '-' : return lval - calculate(index++);
case '*' : return lval * calculate(index++);
- case '/' : return lval / calculate(index++);
- case '^' :
- case '\0':
- default : return lval;
+ case '/' : return lval / calculate(index++);
+ case '^' :
+ case '\0' :
+ default : return lval;
}
}
@@ -38,36 +38,38 @@ String CellFormula::getValueForPrint() {
void CellFormula::parseAndSetValue(const char* str) {
rawFormula = String(str);
- Cell* ptr;
+ Cell* cellToAdd;
char currOp;
- str++;
- while (*str == ' ') str++;
- if (*str == 'R') {
- unsigned row = atoi(++str);
- while (*str != 'C') str++;
- unsigned col = atoi(++str);
- while (*str != ' ') str++;
+ while (*str != '\0') {
+ str++;
+ while (*str == ' ') str++;
+ if (*str == 'R') {
+ unsigned row = atoi(++str);
+ while (*str != 'C') str++;
+ unsigned col = atoi(++str);
+ while (*str != ' ') str++;
- ptr = (*tableCells)[row][col];
- currOp = *str;
- }
- else {
- double val = atof(str);
- while ((*str >= '0' && *str <= '9') || *str == ' ') str++;
+ cellToAdd = (*tableCells)[row][col];
+ currOp = *str;
+ }
+ else {
+ double val = atof(str);
+ while ((*str >= '0' && *str <= '9') || *str == ' ') str++;
- localCells.add(CellDouble(val));
- ptr = &localCells[localCells.get_count() - 1];
- currOp = *str;
- }
+ localCells.add(CellDouble(val));
+ cellToAdd = &localCells[localCells.get_count() - 1];
+ currOp = *str;
+ }
- if (currOp == '^') currOp *= -1;
- else if ((currOp == '+' || currOp == '-') && formula.get_count() != 0) {
- Pair<Cell*, char>& prev = formula[formula.get_count() - 1];
- if (prev.right == '*' || prev.right == '/') prev.right *= -1;
- }
+ if (currOp == '^') currOp *= -1;
+ else if ((currOp == '+' || currOp == '-') && formula.get_count() != 0) {
+ Pair<Cell*, char>& prev = formula[formula.get_count() - 1];
+ if (prev.right == '*' || prev.right == '/') prev.right *= -1;
+ }
- formula.add({ptr, currOp});
+ formula.add({cellToAdd, currOp});
+ }
}
void CellFormula::readFromFile(std::ifstream& file) {