From 88609024447dcf7b25aa163095676cdc3c4ea856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 13 Jan 2017 15:21:39 +0100 Subject: [PATCH] [poincare] Create a class n_context Change-Id: Icce8f8fe79c07e73587d8c0563e930c1b1e6b308 --- poincare/Makefile | 1 + poincare/include/poincare.h | 1 + poincare/include/poincare/n_context.h | 17 +++++++++++++++++ poincare/include/poincare/x_context.h | 4 ++-- poincare/src/n_context.cpp | 24 ++++++++++++++++++++++++ 5 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 poincare/include/poincare/n_context.h create mode 100644 poincare/src/n_context.cpp diff --git a/poincare/Makefile b/poincare/Makefile index 8bee4c7ef..492f7ad16 100644 --- a/poincare/Makefile +++ b/poincare/Makefile @@ -23,6 +23,7 @@ objs += $(addprefix poincare/src/,\ logarithm.o\ matrix.o\ matrix_data.o\ + n_context.o\ nth_root.o\ opposite.o\ parenthesis.o\ diff --git a/poincare/include/poincare.h b/poincare/include/poincare.h index 9d74b0107..f58ed3da7 100644 --- a/poincare/include/poincare.h +++ b/poincare/include/poincare.h @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include diff --git a/poincare/include/poincare/n_context.h b/poincare/include/poincare/n_context.h new file mode 100644 index 000000000..d569c4ce1 --- /dev/null +++ b/poincare/include/poincare/n_context.h @@ -0,0 +1,17 @@ +#ifndef POINCARE_N_CONTEXT_H +#define POINCARE_N_CONTEXT_H + +#include +#include + +class NContext : public Context { +public: + NContext(Context * parentContext = nullptr); + void setExpressionForSymbolName(Expression * expression, const Symbol * symbol) override; + const Expression * expressionForSymbol(const Symbol * symbol) override; +private: + Float m_nValue; + Context * m_parentContext; +}; + +#endif \ No newline at end of file diff --git a/poincare/include/poincare/x_context.h b/poincare/include/poincare/x_context.h index bee9ac94b..0755bf68e 100644 --- a/poincare/include/poincare/x_context.h +++ b/poincare/include/poincare/x_context.h @@ -1,5 +1,5 @@ -#ifndef POINCARE_LOCAL_CONTEXT_H -#define POINCARE_LOCAL_CONTEXT_H +#ifndef POINCARE_X_CONTEXT_H +#define POINCARE_X_CONTEXT_H #include #include diff --git a/poincare/src/n_context.cpp b/poincare/src/n_context.cpp new file mode 100644 index 000000000..985a60489 --- /dev/null +++ b/poincare/src/n_context.cpp @@ -0,0 +1,24 @@ +#include + +NContext::NContext(::Context * parentContext) : + m_nValue(Float(0.0f)), + m_parentContext(parentContext) +{ +} + +void NContext::setExpressionForSymbolName(Expression * expression, const Symbol * symbol) { + if (symbol->name() == 'n') { + m_nValue = Float((int)expression->approximate(*m_parentContext)); + } else { + m_parentContext->setExpressionForSymbolName(expression, symbol); + } +} + +const Expression * NContext::expressionForSymbol(const Symbol * symbol) { + if (symbol->name() == 'n') { + return &m_nValue; + } else { + return m_parentContext->expressionForSymbol(symbol); + } +} +