From dfdaa549281d658e4dfef57ce40c36a70f92e657 Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Thu, 24 Mar 2016 10:19:04 +0100 Subject: [PATCH] Poincare: Clean the Expression::Type Change-Id: I3809a8b1b040314466554866555fb634c35156a5 --- poincare/include/poincare/addition.h | 3 +-- poincare/include/poincare/expression.h | 13 +++++++++++-- poincare/include/poincare/float.h | 3 +-- poincare/include/poincare/fraction.h | 3 +-- poincare/include/poincare/integer.h | 3 +-- poincare/include/poincare/power.h | 4 +--- poincare/include/poincare/product.h | 3 +-- poincare/include/poincare/subtraction.h | 3 +-- poincare/include/poincare/symbol.h | 3 +-- poincare/src/addition.cpp | 4 ++-- poincare/src/float.cpp | 5 ++--- poincare/src/fraction.cpp | 5 ++--- poincare/src/integer.cpp | 4 ++-- poincare/src/power.cpp | 5 ++--- poincare/src/product.cpp | 4 ++-- poincare/src/simplify/simplifier_zero.cpp | 4 ++-- poincare/src/subtraction.cpp | 5 ++--- poincare/src/symbol.cpp | 4 ++-- poincare/test/simplify.cpp | 4 ++-- 19 files changed, 39 insertions(+), 43 deletions(-) diff --git a/poincare/include/poincare/addition.h b/poincare/include/poincare/addition.h index be77c56b8..e97d49f48 100644 --- a/poincare/include/poincare/addition.h +++ b/poincare/include/poincare/addition.h @@ -5,12 +5,11 @@ class Addition : public Expression { public: - static const expression_type_t Type = 0x00; Addition(Expression * first_operand, Expression * second_operand); ~Addition(); ExpressionLayout * createLayout(ExpressionLayout * parent) override; float approximate(Context& context) override; - expression_type_t type() override; + Type type() override; private: Expression * m_left; Expression * m_right; diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 707913c9d..e77947f57 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -5,10 +5,19 @@ #include class Context; -typedef uint8_t expression_type_t; class Expression { public: + enum class Type : uint8_t { + Addition, + Float, + Fraction, + Integer, + Power, + Product, + Subtraction, + Symbol + }; static Expression * parse(char * string); virtual ~Expression(); @@ -22,7 +31,7 @@ class Expression { //virtual bool identicalTo(Expression * e); Expression * simplify(); - virtual expression_type_t type() = 0; + virtual Type type() = 0; virtual float approximate(Context& context) = 0; /*private: diff --git a/poincare/include/poincare/float.h b/poincare/include/poincare/float.h index bddc48e0b..4340f7503 100644 --- a/poincare/include/poincare/float.h +++ b/poincare/include/poincare/float.h @@ -5,13 +5,12 @@ class Float : public Expression { public: - static const expression_type_t Type = 0x03; Float(float f); ~Float(); ExpressionLayout * createLayout(ExpressionLayout * parent) override; float approximate(Context& context) override; - expression_type_t type() override; + Type type() override; private: float m_float; }; diff --git a/poincare/include/poincare/fraction.h b/poincare/include/poincare/fraction.h index 0a5f7f0f1..700f44a27 100644 --- a/poincare/include/poincare/fraction.h +++ b/poincare/include/poincare/fraction.h @@ -5,12 +5,11 @@ class Fraction : public Expression { public: - static const expression_type_t Type = 0x02; Fraction(Expression * numerator, Expression * denominator); ~Fraction(); ExpressionLayout * createLayout(ExpressionLayout * parent) override; float approximate(Context& context) override; - expression_type_t type() override; + Type type() override; private: Expression * m_numerator; Expression * m_denominator; diff --git a/poincare/include/poincare/integer.h b/poincare/include/poincare/integer.h index 2e61b10b6..194b039e0 100644 --- a/poincare/include/poincare/integer.h +++ b/poincare/include/poincare/integer.h @@ -10,11 +10,10 @@ typedef uint64_t double_native_uint_t; class Integer : public Expression { public: - static const expression_type_t Type = 0x01; Integer(native_int_t i); Integer(Integer&& other); // C++11 move constructor Integer(const char * string); // NULL-terminated - expression_type_t type() override; + Type type() override; ~Integer(); diff --git a/poincare/include/poincare/power.h b/poincare/include/poincare/power.h index f2c580c25..37ef822cb 100644 --- a/poincare/include/poincare/power.h +++ b/poincare/include/poincare/power.h @@ -5,13 +5,11 @@ class Power : public Expression { public: - static const expression_type_t Type = 0x04; - Power(Expression * base, Expression * exponent); ~Power(); ExpressionLayout * createLayout(ExpressionLayout * parent) override; float approximate(Context& context) override; - expression_type_t type() override; + Type type() override; private: Expression * m_base; Expression * m_exponent; diff --git a/poincare/include/poincare/product.h b/poincare/include/poincare/product.h index 2ca3f6e12..557497256 100644 --- a/poincare/include/poincare/product.h +++ b/poincare/include/poincare/product.h @@ -5,12 +5,11 @@ class Product : public Expression { public: - static const expression_type_t Type = 0x05; Product(Expression * first_factor, Expression * second_factor); ~Product(); ExpressionLayout * createLayout(ExpressionLayout * parent) override; float approximate(Context& context) override; - expression_type_t type() override; + Type type() override; Expression * factor(int i); int numberOfFactors(); diff --git a/poincare/include/poincare/subtraction.h b/poincare/include/poincare/subtraction.h index 3411f84cd..7cfbe220a 100644 --- a/poincare/include/poincare/subtraction.h +++ b/poincare/include/poincare/subtraction.h @@ -5,12 +5,11 @@ class Subtraction : public Expression { public: - static const expression_type_t Type = 0x06; Subtraction(Expression * first_operand, Expression * second_operand); ~Subtraction(); ExpressionLayout * createLayout(ExpressionLayout * parent) override; float approximate(Context& context) override; - expression_type_t type() override; + Type type() override; private: Expression * m_left; Expression * m_right; diff --git a/poincare/include/poincare/symbol.h b/poincare/include/poincare/symbol.h index c259b9a62..1ce3f75fb 100644 --- a/poincare/include/poincare/symbol.h +++ b/poincare/include/poincare/symbol.h @@ -5,12 +5,11 @@ class Symbol : public Expression { public: - static const expression_type_t Type = 0x07; Symbol(char * name); ~Symbol(); ExpressionLayout * createLayout(ExpressionLayout * parent) override; float approximate(Context& context) override; - expression_type_t type() override; + Type type() override; private: char * m_name; }; diff --git a/poincare/src/addition.cpp b/poincare/src/addition.cpp index e39f34e86..9742df74b 100644 --- a/poincare/src/addition.cpp +++ b/poincare/src/addition.cpp @@ -6,8 +6,8 @@ Addition::Addition(Expression * first_operand, Expression * second_operand) { m_right = second_operand; } -expression_type_t Addition::type() { - return Addition::Type; +Expression::Type Addition::type() { + return Expression::Type::Addition; } Addition::~Addition() { diff --git a/poincare/src/float.cpp b/poincare/src/float.cpp index 94426454f..1ba5ab482 100644 --- a/poincare/src/float.cpp +++ b/poincare/src/float.cpp @@ -11,11 +11,10 @@ float Float::approximate(Context& context) { return m_float; } -expression_type_t Float::type() { - return Float::Type; +Expression::Type Float::type() { + return Expression::Type::Float; } - ExpressionLayout * Float::createLayout(ExpressionLayout * parent) { assert(0); // Should not come here, ever... return nullptr; diff --git a/poincare/src/fraction.cpp b/poincare/src/fraction.cpp index a974558ed..2bdec1004 100644 --- a/poincare/src/fraction.cpp +++ b/poincare/src/fraction.cpp @@ -21,7 +21,6 @@ float Fraction::approximate(Context& context) { return m_numerator->approximate(context)/m_denominator->approximate(context); } -expression_type_t Fraction::type() { - return Fraction::Type; +Expression::Type Fraction::type() { + return Expression::Type::Fraction; } - diff --git a/poincare/src/integer.cpp b/poincare/src/integer.cpp index c8b7b90fb..dd541e725 100644 --- a/poincare/src/integer.cpp +++ b/poincare/src/integer.cpp @@ -305,8 +305,8 @@ float Integer::approximate(Context& context) { return float_result; } -expression_type_t Integer::type() { - return Integer::Type; +Expression::Type Integer::type() { + return Expression::Type::Integer; } ExpressionLayout * Integer::createLayout(ExpressionLayout * parent) { diff --git a/poincare/src/power.cpp b/poincare/src/power.cpp index e6713aab5..40aa51763 100644 --- a/poincare/src/power.cpp +++ b/poincare/src/power.cpp @@ -16,11 +16,10 @@ float Power::approximate(Context& context) { return powf(m_base->approximate(context), m_exponent->approximate(context)); } -expression_type_t Power::type() { - return Power::Type; +Expression::Type Power::type() { + return Expression::Type::Power; } - ExpressionLayout * Power::createLayout(ExpressionLayout * parent) { return new ExponentLayout(parent, m_base, m_exponent); } diff --git a/poincare/src/product.cpp b/poincare/src/product.cpp index 3d932a459..e8b262939 100644 --- a/poincare/src/product.cpp +++ b/poincare/src/product.cpp @@ -33,8 +33,8 @@ Expression * Product::factor(int i) { return m_factors[i]; } -expression_type_t Product::type() { - return Product::Type; +Expression::Type Product::type() { + return Expression::Type::Product; } ExpressionLayout * Product::createLayout(ExpressionLayout * parent) { diff --git a/poincare/src/simplify/simplifier_zero.cpp b/poincare/src/simplify/simplifier_zero.cpp index 83853409f..e5c5e290e 100644 --- a/poincare/src/simplify/simplifier_zero.cpp +++ b/poincare/src/simplify/simplifier_zero.cpp @@ -3,13 +3,13 @@ #include Expression * SimplifierZero(Expression * e) { - if (e->type() != Product::Type) { + if (e->type() != Expression::Type::Product) { return nullptr; } Product * p = (Product *)e; for (int i=0; inumberOfFactors(); i++) { Expression * factor = p->factor(i); - if (factor->type() == Integer::Type) { + if (factor->type() == Expression::Type::Integer) { Integer * integer = (Integer *)factor; if (*integer == Integer((native_int_t)0)) { return new Integer("0"); diff --git a/poincare/src/subtraction.cpp b/poincare/src/subtraction.cpp index 8c0a93248..10ff67741 100644 --- a/poincare/src/subtraction.cpp +++ b/poincare/src/subtraction.cpp @@ -15,11 +15,10 @@ float Subtraction::approximate(Context& context) { return m_left->approximate(context) - m_right->approximate(context); } -expression_type_t Subtraction::type() { - return Subtraction::Type; +Expression::Type Subtraction::type() { + return Expression::Type::Subtraction; } - ExpressionLayout * Subtraction::createLayout(ExpressionLayout * parent) { return new HorizontalLayout(parent, m_left, '-', m_right); } diff --git a/poincare/src/symbol.cpp b/poincare/src/symbol.cpp index 1b084416c..ec122b95b 100644 --- a/poincare/src/symbol.cpp +++ b/poincare/src/symbol.cpp @@ -18,8 +18,8 @@ float Symbol::approximate(Context& context) { return context[m_name]->approximate(context); } -expression_type_t Symbol::type() { - return Symbol::Type; +Expression::Type Symbol::type() { + return Expression::Type::Symbol; } ExpressionLayout * Symbol::createLayout(ExpressionLayout * parent) { diff --git a/poincare/test/simplify.cpp b/poincare/test/simplify.cpp index de595f1d3..480e5e896 100644 --- a/poincare/test/simplify.cpp +++ b/poincare/test/simplify.cpp @@ -6,11 +6,11 @@ QUIZ_CASE(poincare_simplify) { { Expression * e = Expression::parse((char *)"3*0"); Expression * e2 = e->simplify(); - assert(e2->type() == Integer::Type); + assert(e2->type() == Expression::Type::Integer); } { Expression * e = Expression::parse((char *)"0*foo"); Expression * e2 = e->simplify(); - assert(e2->type() == Integer::Type); + assert(e2->type() == Expression::Type::Integer); } }