summaryrefslogtreecommitdiff
path: root/expressions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'expressions.cpp')
-rw-r--r--expressions.cpp41
1 files changed, 39 insertions, 2 deletions
diff --git a/expressions.cpp b/expressions.cpp
index 72e1e04..6046a9c 100644
--- a/expressions.cpp
+++ b/expressions.cpp
@@ -4,6 +4,7 @@
#include "include/lexer.hpp"
#include "include/expressions.hpp"
#include "include/differentiator.hpp"
+#include "include/simplifier.hpp"
using std::string, std::to_string;
@@ -30,6 +31,10 @@ Expression *Literal::diff(const Differentiator *d) {
return d->visit(this);
}
+Expression *Literal::simplify(const Simplifier *s) {
+ return s->visit(this);
+}
+
Expression *Literal::copy() {
return new Literal(value);
}
@@ -56,6 +61,10 @@ Expression *Function::diff(const Differentiator *d) {
return d->visit(this);
}
+Expression *Function::simplify(const Simplifier *s) {
+ return s->visit(this);
+}
+
void Function::delTree() {
delete arg;
}
@@ -136,6 +145,10 @@ Expression *Variable::diff(const Differentiator *d) {
return d->visit(this);
}
+Expression *Variable::simplify(const Simplifier *s) {
+ return s->visit(this);
+}
+
Expression *Variable::copy() {
return new Variable(name);
}
@@ -159,6 +172,10 @@ Expression *AddExpression::diff(const Differentiator *d) {
return d->visit(this);
}
+Expression *AddExpression::simplify(const Simplifier *s) {
+ return s->visit(this);
+}
+
Expression *AddExpression::copy() {
return new AddExpression(left->copy(), right->copy());
}
@@ -172,16 +189,20 @@ SubExpression::~SubExpression() {
}
float SubExpression::eval(int arg) {
- float right_val = right->eval(arg);
float left_val = left->eval(arg);
+ float right_val = right->eval(arg);
- return right_val - left_val;
+ return left_val - right_val;
}
Expression *SubExpression::diff(const Differentiator *d) {
return d->visit(this);
}
+Expression *SubExpression::simplify(const Simplifier *s) {
+ return s->visit(this);
+}
+
Expression *SubExpression::copy() {
return new SubExpression(left->copy(), right->copy());
}
@@ -209,6 +230,10 @@ Expression *NegationExpression::diff(const Differentiator *d) {
return d->visit(this);
}
+Expression *NegationExpression::simplify(const Simplifier *s) {
+ return s->visit(this);
+}
+
Expression *NegationExpression::copy() {
return new NegationExpression(right->copy());
}
@@ -232,6 +257,10 @@ Expression *DivisionExpression::diff(const Differentiator *d) {
return d->visit(this);
}
+Expression *DivisionExpression::simplify(const Simplifier *s) {
+ return s->visit(this);
+}
+
Expression *DivisionExpression::copy() {
return new DivisionExpression(left->copy(), right->copy());
}
@@ -256,6 +285,10 @@ Expression *MultiplicationExpression::diff(const Differentiator *d) {
return d->visit(this);
}
+Expression *MultiplicationExpression::simplify(const Simplifier *s) {
+ return s->visit(this);
+}
+
Expression *MultiplicationExpression::copy() {
return new MultiplicationExpression(left->copy(), right->copy());
}
@@ -279,6 +312,10 @@ Expression *PowerExpression::diff(const Differentiator *d) {
return d->visit(this);
}
+Expression *PowerExpression::simplify(const Simplifier *s) {
+ return s->visit(this);
+}
+
Expression *PowerExpression::copy() {
return new PowerExpression(left->copy(), right->copy());
}