diff --git a/poincare/include/poincare/addition.h b/poincare/include/poincare/addition.h index 1450d2edc..f3315305d 100644 --- a/poincare/include/poincare/addition.h +++ b/poincare/include/poincare/addition.h @@ -6,8 +6,9 @@ class Addition : public Expression { public: Addition(Expression * first_operand, Expression * second_operand); + ~Addition(); ExpressionLayout * createLayout(ExpressionLayout * parent) override; - virtual float approximate(); + float approximate() override; private: Expression * m_children[2]; }; diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 7980c8be3..1e587df70 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -7,6 +7,7 @@ class Expression { public: static Expression * parse(char * string); + virtual ~Expression(); //virtual Expression ** children() = 0; // NULL-terminated diff --git a/poincare/include/poincare/fraction.h b/poincare/include/poincare/fraction.h index ff7b6f2e6..50d21a9d9 100644 --- a/poincare/include/poincare/fraction.h +++ b/poincare/include/poincare/fraction.h @@ -6,12 +6,12 @@ class Fraction : public Expression { public: Fraction(Expression * numerator, Expression * denominator); -// virtual Expression ** children(); -// protected: - virtual ExpressionLayout * createLayout(ExpressionLayout * parent); - virtual float approximate(); + ~Fraction(); + ExpressionLayout * createLayout(ExpressionLayout * parent) override; + float approximate() override; private: - Expression * m_children[3]; + Expression * m_numerator; + Expression * m_denominator; }; #endif diff --git a/poincare/src/addition.cpp b/poincare/src/addition.cpp index 75ee79d82..1e68ff523 100644 --- a/poincare/src/addition.cpp +++ b/poincare/src/addition.cpp @@ -6,6 +6,11 @@ Addition::Addition(Expression * first_operand, Expression * second_operand) { m_children[1] = second_operand; } +Addition::~Addition() { + delete m_children[1]; + delete m_children[0]; +} + float Addition::approximate() { return m_children[0]->approximate() + m_children[1]->approximate(); } diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index 25ea59935..36069ed12 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -12,13 +12,15 @@ Expression * Expression::parse(char * string) { Expression * expression = 0; poincare_expression_yyparse(scanner, &expression); - poincare_expression_yy_delete_buffer(buf, scanner); poincare_expression_yylex_destroy(scanner); return expression; } +Expression::~Expression() { +} + /* bool Expression::identicalTo(Expression * e) { // By default, two expression are not identical. diff --git a/poincare/src/fraction.cpp b/poincare/src/fraction.cpp index 1e634748f..64798dcdb 100644 --- a/poincare/src/fraction.cpp +++ b/poincare/src/fraction.cpp @@ -2,62 +2,21 @@ #include #include "layout/fraction_layout.h" -/* -static inline KDCoordinate max(KDCoordinate a, KDCoordinate b) { - return (a > b ? a : b); +Fraction::Fraction(Expression * numerator, Expression * denominator) : + m_numerator(numerator), + m_denominator(denominator) { } -*/ -#define NUMERATOR m_children[0] -#define DENOMINATOR m_children[1] - -#define FRACTION_BORDER_LENGTH 2 -#define FRACTION_LINE_MARGIN 2 -#define FRACTION_LINE_HEIGHT 1 - -Fraction::Fraction(Expression * numerator, Expression * denominator) { - m_children[0] = numerator; - m_children[1] = denominator; - m_children[2] = NULL; +Fraction::~Fraction() { + delete m_denominator; + delete m_numerator; } -/* - -Expression ** Fraction::children() { - return m_children; -} -*/ ExpressionLayout * Fraction::createLayout(ExpressionLayout * parent) { - return new FractionLayout(parent, NUMERATOR, DENOMINATOR); + return new FractionLayout(parent, m_numerator, m_denominator); } -/* -void Fraction::layout() { - KDRect numFrame = NUMERATOR->m_frame; - KDRect denFrame = DENOMINATOR->m_frame; - - m_frame.width = max(numFrame.width, denFrame.width) + 2*FRACTION_BORDER_LENGTH; - m_frame.height = numFrame.height + FRACTION_LINE_MARGIN + FRACTION_LINE_HEIGHT + FRACTION_LINE_MARGIN + denFrame.height; - - NUMERATOR->m_frame.origin = { - .x = (KDCoordinate)((m_frame.width - numFrame.width)/2), - .y = 0 - }; - - DENOMINATOR->m_frame.origin = { - .x = (KDCoordinate)((m_frame.width - denFrame.width)/2), - .y = (KDCoordinate)(numFrame.height + 2*FRACTION_LINE_MARGIN + FRACTION_LINE_HEIGHT) - }; -} - -void Fraction::draw() { - KDCoordinate fractionLineY = NUMERATOR->m_frame.height + FRACTION_LINE_MARGIN; - - KDDrawLine((KDPoint){.x = 0, .y = fractionLineY}, - (KDPoint){.x = m_frame.width, .y = fractionLineY}); -} -*/ float Fraction::approximate() { // TODO: handle division by zero - return m_children[0]->approximate()/m_children[1]->approximate(); + return m_numerator->approximate()/m_denominator->approximate(); }