From aa0b785f3d7935668a0ac674b09fd4aed9ae0a4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 14 Dec 2018 15:17:05 +0100 Subject: [PATCH] [shared] In models Equation, Sequence: the recorded expression does not need to be beautified. Use Reduce instead of simplify --- apps/sequence/sequence.cpp | 4 ++-- apps/shared/expression_model.cpp | 2 +- apps/shared/poincare_helpers.h | 4 ++++ poincare/include/poincare/expression.h | 1 + poincare/src/expression.cpp | 10 +++++++++- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/apps/sequence/sequence.cpp b/apps/sequence/sequence.cpp index d7bedbfef..5cf80f9ff 100644 --- a/apps/sequence/sequence.cpp +++ b/apps/sequence/sequence.cpp @@ -96,14 +96,14 @@ void Sequence::setInitialRank(int rank) { Poincare::Expression Sequence::firstInitialConditionExpression(Context * context) const { if (m_firstInitialConditionExpression.isUninitialized()) { - m_firstInitialConditionExpression = PoincareHelpers::ParseAndSimplify(m_firstInitialConditionText, *context); + m_firstInitialConditionExpression = PoincareHelpers::ParseAndReduce(m_firstInitialConditionText, *context); } return m_firstInitialConditionExpression; } Poincare::Expression Sequence::secondInitialConditionExpression(Context * context) const { if (m_secondInitialConditionExpression.isUninitialized()) { - m_secondInitialConditionExpression = PoincareHelpers::ParseAndSimplify(m_secondInitialConditionText, *context); + m_secondInitialConditionExpression = PoincareHelpers::ParseAndReduce(m_secondInitialConditionText, *context); } return m_secondInitialConditionExpression; } diff --git a/apps/shared/expression_model.cpp b/apps/shared/expression_model.cpp index bc7362e85..4dfecbbe8 100644 --- a/apps/shared/expression_model.cpp +++ b/apps/shared/expression_model.cpp @@ -21,7 +21,7 @@ const char * ExpressionModel::text() const { Poincare::Expression ExpressionModel::expression(Poincare::Context * context) const { if (m_expression.isUninitialized()) { - m_expression = PoincareHelpers::ParseAndSimplify(m_text, *context); + m_expression = PoincareHelpers::ParseAndReduce(m_text, *context); } return m_expression; } diff --git a/apps/shared/poincare_helpers.h b/apps/shared/poincare_helpers.h index a9a2b9ef6..90c0745cd 100644 --- a/apps/shared/poincare_helpers.h +++ b/apps/shared/poincare_helpers.h @@ -37,6 +37,10 @@ inline T ApproximateToScalar(const char * text, Poincare::Context & context) { return Poincare::Expression::approximateToScalar(text, context, Poincare::Preferences::sharedPreferences()->angleUnit()); } +inline Poincare::Expression ParseAndReduce(const char * text, Poincare::Context & context) { + return Poincare::Expression::ParseAndReduce(text, context, Poincare::Preferences::sharedPreferences()->angleUnit()); +} + inline Poincare::Expression ParseAndSimplify(const char * text, Poincare::Context & context) { return Poincare::Expression::ParseAndSimplify(text, context, Poincare::Preferences::sharedPreferences()->angleUnit()); } diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index f6feb43f4..aaca8f7bf 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -167,6 +167,7 @@ public: int serialize(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode = Preferences::PrintFloatMode::Decimal, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const; /* Simplification */ + static Expression ParseAndReduce(const char * text, Context & context, Preferences::AngleUnit); static Expression ParseAndSimplify(const char * text, Context & context, Preferences::AngleUnit angleUnit); Expression simplify(Context & context, Preferences::AngleUnit angleUnit); Expression reduce(Context & context, Preferences::AngleUnit angleUnit); diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index 8df1b9a5b..1363d40de 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -312,6 +312,14 @@ int Expression::serialize(char * buffer, int bufferSize, Preferences::PrintFloat /* Simplification */ +Expression Expression::ParseAndReduce(const char * text, Context & context, Preferences::AngleUnit angleUnit) { + Expression exp = Parse(text); + if (exp.isUninitialized()) { + return Undefined(); + } + return exp.reduce(context, angleUnit); +} + Expression Expression::ParseAndSimplify(const char * text, Context & context, Preferences::AngleUnit angleUnit) { Expression exp = Parse(text); if (exp.isUninitialized()) { @@ -415,7 +423,7 @@ U Expression::approximateToScalar(Context& context, Preferences::AngleUnit angle template U Expression::approximateToScalar(const char * text, Context& context, Preferences::AngleUnit angleUnit) { - Expression exp = ParseAndSimplify(text, context, angleUnit); + Expression exp = ParseAndReduce(text, context, angleUnit); return exp.approximateToScalar(context, angleUnit); }