From 5b53438f2c27ad4dcf42e509ee36ffe3c46b8052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Fri, 10 Aug 2018 10:19:06 +0200 Subject: [PATCH] [poincare] VariableContext --- poincare/Makefile | 1 + poincare/include/poincare/variable_context.h | 11 ++++++---- poincare/src/variable_context.cpp | 21 ++++++++++---------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/poincare/Makefile b/poincare/Makefile index 42a7206a2..176b5ed3a 100644 --- a/poincare/Makefile +++ b/poincare/Makefile @@ -35,6 +35,7 @@ objs += $(addprefix poincare/src/,\ layout_helper.o\ simplification_helper.o\ global_context.o\ + variable_context.o\ ) objsExpected += $(addprefix poincare/src/,\ diff --git a/poincare/include/poincare/variable_context.h b/poincare/include/poincare/variable_context.h index 60b4ad89e..a2726506d 100644 --- a/poincare/include/poincare/variable_context.h +++ b/poincare/include/poincare/variable_context.h @@ -2,7 +2,7 @@ #define POINCARE_VARIABLE_CONTEXT_H #include -#include +#include namespace Poincare { @@ -11,11 +11,14 @@ class VariableContext : public Context { public: VariableContext(char name, Context * parentContext = nullptr); void setApproximationForVariable(T value); - void setExpressionForSymbolName(const Expression * expression, const Symbol * symbol, Context & context) override; - const Expression * expressionForSymbol(const Symbol * symbol) override; + + // Context + void setExpressionForSymbolName(const Expression expression, const Symbol symbol, Context & context) override; + const Expression expressionForSymbol(const Symbol symbol) override; + private: char m_name; - Approximation m_value; + Float m_value; Context * m_parentContext; }; diff --git a/poincare/src/variable_context.cpp b/poincare/src/variable_context.cpp index dd92476bf..f3f202d8f 100644 --- a/poincare/src/variable_context.cpp +++ b/poincare/src/variable_context.cpp @@ -1,6 +1,7 @@ #include #include -#include +#include + #include namespace Poincare { @@ -8,32 +9,32 @@ namespace Poincare { template VariableContext::VariableContext(char name, Context * parentContext) : m_name(name), - m_value(Approximation(NAN)), + m_value(Float(NAN)), m_parentContext(parentContext) { } template void VariableContext::setApproximationForVariable(T value) { - m_value = Approximation(value); + m_value = Float(value); } template -void VariableContext::setExpressionForSymbolName(const Expression * expression, const Symbol * symbol, Context & context) { - if (symbol->name() == m_name) { - if (expression == nullptr) { +void VariableContext::setExpressionForSymbolName(const Expression expression, const Symbol symbol, Context & context) { + if (symbol.name() == m_name) { + if (!expression.isDefined()) { return; } - m_value = Approximation(expression->approximateToScalar(context, Preferences::sharedPreferences()->angleUnit())); + m_value = Float(expression.approximateToScalar(context, Preferences::sharedPreferences()->angleUnit())); } else { m_parentContext->setExpressionForSymbolName(expression, symbol, context); } } template -const Expression * VariableContext::expressionForSymbol(const Symbol * symbol) { - if (symbol->name() == m_name) { - return &m_value; +const Expression VariableContext::expressionForSymbol(const Symbol symbol) { + if (symbol.name() == m_name) { + return m_value; } else { return m_parentContext->expressionForSymbol(symbol); }