diff options
Diffstat (limited to 'include/expressions.hpp')
-rw-r--r-- | include/expressions.hpp | 23 |
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; }; |