Files
Upsilon/apps/calculation/local_context.cpp
Émilie Feral 6c51c584f2 [apps] Change Calculation to hold an exact and an approximate output
Change-Id: I1805839e17cd42b82f06ce0a320d20b49cd2a6cd
2017-11-21 17:37:25 +01:00

36 lines
1.1 KiB
C++

#include "local_context.h"
#include <string.h>
using namespace Poincare;
namespace Calculation {
LocalContext::LocalContext(GlobalContext * parentContext, CalculationStore * calculationStore) :
m_calculationStore(calculationStore),
m_parentContext(parentContext)
{
}
Expression * LocalContext::ansValue() {
if (m_calculationStore->numberOfCalculations() == 0) {
return m_parentContext->defaultExpression();
}
Calculation * lastCalculation = m_calculationStore->calculationAtIndex(m_calculationStore->numberOfCalculations()-1);
return lastCalculation->approximateOutput(m_parentContext);
}
void LocalContext::setExpressionForSymbolName(const Expression * expression, const Symbol * symbol, Context & context) {
if (symbol->name() != Symbol::SpecialSymbols::Ans) {
m_parentContext->setExpressionForSymbolName(expression, symbol, context);
}
}
const Expression * LocalContext::expressionForSymbol(const Symbol * symbol) {
if (symbol->name() == Symbol::SpecialSymbols::Ans) {
return ansValue();
} else {
return m_parentContext->expressionForSymbol(symbol);
}
}
}