From 620b64a5833e100b86af04208acdc7942c4b95af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Tue, 6 Dec 2016 11:01:16 +0100 Subject: [PATCH] [apps/probability] Create a class evaluate context for probability app Change-Id: I38448ddeec25225edad1d96bf89d32d1eb86915d --- apps/probability/Makefile | 1 + apps/probability/evaluate_context.cpp | 39 +++++++++++++++++++++++++++ apps/probability/evaluate_context.h | 24 +++++++++++++++++ poincare/include/poincare/symbol.h | 4 ++- poincare/src/expression_lexer.l | 2 ++ 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 apps/probability/evaluate_context.cpp create mode 100644 apps/probability/evaluate_context.h diff --git a/apps/probability/Makefile b/apps/probability/Makefile index 780ea7e96..21188f7b6 100644 --- a/apps/probability/Makefile +++ b/apps/probability/Makefile @@ -1,6 +1,7 @@ app_objs += $(addprefix apps/probability/,\ app.o\ cell.o\ + evaluate_context.o\ law.o\ law_controller.o\ parameters_controller.o\ diff --git a/apps/probability/evaluate_context.cpp b/apps/probability/evaluate_context.cpp new file mode 100644 index 000000000..87236cf1a --- /dev/null +++ b/apps/probability/evaluate_context.cpp @@ -0,0 +1,39 @@ +#include "evaluate_context.h" +#include + +namespace Probability { + +EvaluateContext::EvaluateContext(::Context * parentContext) : + m_tValue(Float(0.0f)), + m_firstParameterValue(Float(0.0f)), + m_secondParameterValue(Float(0.0f)), + m_context(parentContext) +{ +} + +void EvaluateContext::setOverridenValueForSymbolT(float f) { + m_tValue = Float(f); +} + +void EvaluateContext::setOverridenValueForFirstParameter(float f) { + m_firstParameterValue = Float(f); +} + +void EvaluateContext::setOverridenValueForSecondParameter(float f) { + m_secondParameterValue = Float(f); +} + +const Expression * EvaluateContext::expressionForSymbol(const Symbol * symbol) { + if (symbol->name() == 't') { + return &m_tValue; + } + if (symbol->name() == Symbol::SpecialSymbols::p1) { + return &m_firstParameterValue; + } + if (symbol->name() == Symbol::SpecialSymbols::p2) { + return &m_secondParameterValue; + } + return m_context->expressionForSymbol(symbol); +} + +} diff --git a/apps/probability/evaluate_context.h b/apps/probability/evaluate_context.h new file mode 100644 index 000000000..997533b06 --- /dev/null +++ b/apps/probability/evaluate_context.h @@ -0,0 +1,24 @@ +#ifndef PROBABILITY_EVALUATECONTEXT_H +#define PROBABILITY_EVALUATECONTEXT_H + +#include + +namespace Probability { + +class EvaluateContext : public ::Context { + public: + EvaluateContext(Context * parentContext); + void setOverridenValueForSymbolT(float f); + void setOverridenValueForFirstParameter(float f); + void setOverridenValueForSecondParameter(float f); + const Expression * expressionForSymbol(const Symbol * symbol) override; + private: + Float m_tValue; + Float m_firstParameterValue; + Float m_secondParameterValue; + ::Context * m_context; +}; + +} + +#endif \ No newline at end of file diff --git a/poincare/include/poincare/symbol.h b/poincare/include/poincare/symbol.h index 035ba67bd..334abcc48 100644 --- a/poincare/include/poincare/symbol.h +++ b/poincare/include/poincare/symbol.h @@ -6,7 +6,9 @@ class Symbol : public LeafExpression { public: enum SpecialSymbols : char { - Ans = '^' + Ans = '^', + p1 = '*', + p2 = '$' }; Symbol(char name); ExpressionLayout * createLayout() const override; diff --git a/poincare/src/expression_lexer.l b/poincare/src/expression_lexer.l index a59b7f1d0..2430e10e9 100644 --- a/poincare/src/expression_lexer.l +++ b/poincare/src/expression_lexer.l @@ -69,6 +69,8 @@ [0-9]+ { poincare_expression_yylval.string = yytext; return(INTEGER); } [A-Zxnt] { poincare_expression_yylval.character = yytext[0]; return SYMBOL; } ans { poincare_expression_yylval.character = Symbol::Ans; return SYMBOL; } +p1 { poincare_expression_yylval.character = Symbol::p1; return SYMBOL; } +p2 { poincare_expression_yylval.character = Symbol::p2; return SYMBOL; } sin { poincare_expression_yylval.expression = new Sine(); return FUNCTION; } cos { poincare_expression_yylval.expression = new Cosine(); return FUNCTION; } tan { poincare_expression_yylval.expression = new Tangent(); return FUNCTION; }