summaryrefslogtreecommitdiff
path: root/include/expressions.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/expressions.hpp')
-rw-r--r--include/expressions.hpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/include/expressions.hpp b/include/expressions.hpp
index a293408..604801d 100644
--- a/include/expressions.hpp
+++ b/include/expressions.hpp
@@ -24,6 +24,7 @@ enum trig_functions {
};
class Differentiator; // Forward declaration
+class Simplifier;
class Expression {
public:
@@ -31,9 +32,11 @@ public:
virtual ~Expression() = default;
std::string getRepr();
virtual Expression *diff(const Differentiator *d) = 0;
+ template <class E>
+ Expression *simplify(E *expr, const Simplifier *s);
Expression *getLeft();
Expression *getRight();
- virtual float eval(int arg) = 0;
+ virtual float eval(int arg=0) = 0;
virtual Expression *copy() = 0; // Regresa una copia de la expresión actual.
protected:
Expression *left;
@@ -51,7 +54,7 @@ public:
explicit Literal(int value);
~Literal();
int getValue();
- float eval(int arg) override;
+ float eval(int arg=0) override;
Expression *diff(const Differentiator *d) override;
Expression *copy() override;
protected:
@@ -66,7 +69,7 @@ public:
Function(Expression *arg, trig_functions name);
~Function();
Expression *getArg();
- float eval(int arg) override;
+ float eval(int arg=0) override;
Expression *diff(const Differentiator *d) override;
trig_functions getFunctionName() const;
Expression *copy() override;
@@ -81,7 +84,7 @@ private:
public:
explicit Variable(char name);
~Variable();
- float eval(int arg) override;
+ float eval(int arg=0) override;
Expression *diff(const Differentiator *d) override;
Expression *copy() override;
protected:
@@ -92,7 +95,7 @@ class AddExpression : public Expression {
public:
AddExpression(Expression *left, Expression *right);
~AddExpression();
- float eval(int arg) override;
+ float eval(int arg=0) override;
Expression *diff(const Differentiator *d) override;
Expression *copy() override;
};
@@ -101,7 +104,7 @@ class SubExpression : public Expression {
public:
SubExpression(Expression *left, Expression *right);
~SubExpression();
- float eval(int arg) override;
+ float eval(int arg=0) override;
Expression *copy() override;
Expression *diff(const Differentiator *d) override;
};
@@ -110,7 +113,7 @@ class NegationExpression : public Expression {
public:
explicit NegationExpression(Expression *right);
~NegationExpression();
- float eval(int arg) override;
+ float eval(int arg=0) override;
Expression *copy() override;
Expression *diff(const Differentiator *d) override;
protected:
@@ -121,7 +124,7 @@ class DivisionExpression : public Expression {
public:
DivisionExpression(Expression *left, Expression *right);
~DivisionExpression();
- float eval(int arg) override;
+ float eval(int arg=0) override;
Expression *copy() override;
Expression *diff(const Differentiator *d) override;
};
@@ -130,7 +133,7 @@ class MultiplicationExpression : public Expression {
public:
MultiplicationExpression(Expression *left, Expression *right);
~MultiplicationExpression();
- float eval(int arg) override;
+ float eval(int arg=0) override;
Expression *copy() override;
Expression *diff(const Differentiator *d) override;
};
@@ -139,7 +142,7 @@ class PowerExpression : public Expression {
public:
PowerExpression(Expression *left, Expression *right);
~PowerExpression();
- float eval(int arg) override;
+ float eval(int arg=0) override;
Expression *copy() override;
Expression *diff(const Differentiator *d) override;
};