[apps/graph] Avoid storing weird x values in the local context

Change-Id: Iee751da03fb9c6cda2e77d2570e8af2aef5ed5da
This commit is contained in:
Émilie Feral
2017-02-22 09:44:55 +01:00
parent e2ec5409c5
commit bd094056e6
3 changed files with 8 additions and 3 deletions

View File

@@ -15,6 +15,10 @@ class App : public Shared::TextFieldDelegateApp {
public:
App(Container * container, Poincare::Context * context);
InputViewController * inputViewController();
/* This local context can parse x. However, it always stores NAN
* as x value. When we need to evaluate expression with a specific x value, we
* use a temporary local context (on the stack). That way, we avoid keeping
* weird x values after drawing curves or displaying the value table. */
Poincare::Context * localContext() override;
private:
CartesianFunctionStore m_functionStore;

View File

@@ -75,10 +75,11 @@ void Function::setActive(bool active) {
}
float Function::evaluateAtAbscissa(float x, Poincare::Context * context) const {
Poincare::VariableContext variableContext = Poincare::VariableContext(symbol(), context);
Poincare::Symbol xSymbol = Poincare::Symbol(symbol());
Poincare::Complex e = Poincare::Complex::Float(x);
context->setExpressionForSymbolName(&e, &xSymbol);
return m_expression->approximate(*context);
variableContext.setExpressionForSymbolName(&e, &xSymbol);
return m_expression->approximate(variableContext);
}
}

View File

@@ -6,7 +6,7 @@ namespace Poincare {
VariableContext::VariableContext(char name, Context * parentContext) :
m_name(name),
m_value(Complex::Float(0.0f)),
m_value(Complex::Float(NAN)),
m_parentContext(parentContext)
{
}