Numworks Epsilon
1.4.1
Graphing Calculator Operating System
variable_context.cpp
Go to the documentation of this file.
1
#include <
poincare/variable_context.h
>
2
#include <
poincare/preferences.h
>
3
#include <
assert.h
>
4
#include <cmath>
5
6
namespace
Poincare
{
7
8
template
<
typename
T>
9
VariableContext<T>::VariableContext
(
char
name,
Context
* parentContext) :
10
m_name(name),
11
m_value(
Complex
<
T
>::Float(
NAN
)),
12
m_parentContext(parentContext)
13
{
14
}
15
16
template
<
typename
T>
17
void
VariableContext<T>::setExpressionForSymbolName
(
const
Expression
* expression,
const
Symbol
* symbol,
Context
& context) {
18
if
(symbol->
name
() == m_name) {
19
if
(expression ==
nullptr
) {
20
return
;
21
}
22
if
(expression->
type
() ==
Expression::Type::Complex
) {
23
m_value =
Complex<T>::Float
(
static_cast<
const
Complex<T>
*
>
(expression)->toScalar());
24
}
else
{
25
m_value =
Complex<T>::Float
(
NAN
);
26
}
27
}
else
{
28
m_parentContext->setExpressionForSymbolName(expression, symbol, context);
29
}
30
}
31
32
template
<
typename
T>
33
const
Expression
*
VariableContext<T>::expressionForSymbol
(
const
Symbol
* symbol) {
34
if
(symbol->
name
() == m_name) {
35
return
&m_value;
36
}
else
{
37
return
m_parentContext->expressionForSymbol(symbol);
38
}
39
}
40
41
template
class
Poincare::VariableContext<float>
;
42
template
class
Poincare::VariableContext<double>
;
43
44
}
Poincare::Context
Definition:
context.h:9
NAN
#define NAN
Definition:
math.h:30
variable_context.h
Poincare::Symbol::name
char name() const
Definition:
symbol.cpp:185
T
#define T(x)
Definition:
events.cpp:26
Poincare
Definition:
absolute_value.h:8
Poincare::VariableContext::expressionForSymbol
const Expression * expressionForSymbol(const Symbol *symbol) override
Definition:
variable_context.cpp:33
assert.h
Poincare::Complex
Definition:
complex.h:12
preferences.h
Poincare::Complex::Float
static Complex< T > Float(T x)
Definition:
complex.cpp:23
Poincare::Symbol
Definition:
symbol.h:8
Poincare::Expression::Type::Complex
Poincare::VariableContext
Definition:
variable_context.h:10
Poincare::Expression
Definition:
expression.h:16
Poincare::VariableContext::setExpressionForSymbolName
void setExpressionForSymbolName(const Expression *expression, const Symbol *symbol, Context &context) override
Definition:
variable_context.cpp:17
Poincare::Expression::type
virtual Type type() const =0
Poincare::VariableContext::VariableContext
VariableContext(char name, Context *parentContext=nullptr)
Definition:
variable_context.cpp:9
epsilon
poincare
src
variable_context.cpp
Generated by
1.8.14