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); }