diff --git a/apps/sequence/sequence.cpp b/apps/sequence/sequence.cpp index 689098ca9..27841a174 100644 --- a/apps/sequence/sequence.cpp +++ b/apps/sequence/sequence.cpp @@ -161,4 +161,15 @@ Poincare::ExpressionLayout * Sequence::secondInitialConditionName() { return m_secondInitialConditionName; } +bool Sequence::isDefined() { + switch (m_type) { + case Type::Explicite: + return layout() != nullptr; + case Type::SingleRecurrence: + return layout() != nullptr && m_firstInitialConditionLayout != nullptr; + default: + return layout() != nullptr && m_firstInitialConditionLayout != nullptr && m_secondInitialConditionLayout != nullptr; + } +} + } diff --git a/apps/sequence/sequence.h b/apps/sequence/sequence.h index b47ab0e1a..7eeb058d2 100644 --- a/apps/sequence/sequence.h +++ b/apps/sequence/sequence.h @@ -29,6 +29,7 @@ public: Poincare::ExpressionLayout * definitionName(); Poincare::ExpressionLayout * firstInitialConditionName(); Poincare::ExpressionLayout * secondInitialConditionName(); + bool isDefined() override; private: Type m_type; char m_firstInitialConditionText[Shared::Function::k_bodyLength]; diff --git a/apps/shared/function.cpp b/apps/shared/function.cpp index c5aa8f341..f4e0d4cba 100644 --- a/apps/shared/function.cpp +++ b/apps/shared/function.cpp @@ -62,6 +62,10 @@ Poincare::ExpressionLayout * Function::layout() { return m_layout; } +bool Function::isDefined() { + return m_layout != nullptr; +} + bool Function::isActive() { return m_active; } diff --git a/apps/shared/function.h b/apps/shared/function.h index 1d9022559..1b19233c2 100644 --- a/apps/shared/function.h +++ b/apps/shared/function.h @@ -15,6 +15,7 @@ public: KDColor color() const { return m_color; } Poincare::Expression * expression(); Poincare::ExpressionLayout * layout(); + virtual bool isDefined(); bool isActive(); void setActive(bool active); void setContent(const char * c); diff --git a/apps/shared/function_store.cpp b/apps/shared/function_store.cpp index 2663af258..0c735f7aa 100644 --- a/apps/shared/function_store.cpp +++ b/apps/shared/function_store.cpp @@ -12,7 +12,7 @@ Function * FunctionStore::activeFunctionAtIndex(int i) { assert(i>=0 && iisActive() && functionAtIndex(k)->layout() != nullptr) { + if (functionAtIndex(k)->isActive() && functionAtIndex(k)->isDefined()) { if (i == index) { return functionAtIndex(k); } @@ -27,7 +27,7 @@ Function * FunctionStore::definedFunctionAtIndex(int i) { assert(i>=0 && ilayout() != nullptr) { + if (functionAtIndex(k)->isDefined()) { if (i == index) { return functionAtIndex(k); } @@ -45,7 +45,7 @@ int FunctionStore::numberOfFunctions() { int FunctionStore::numberOfActiveFunctions() { int result = 0; for (int i = 0; i < m_numberOfFunctions; i++) { - if (functionAtIndex(i)->layout() != nullptr && functionAtIndex(i)->isActive()) { + if (functionAtIndex(i)->isDefined() && functionAtIndex(i)->isActive()) { result++; } } @@ -55,7 +55,7 @@ int FunctionStore::numberOfActiveFunctions() { int FunctionStore::numberOfDefinedFunctions() { int result = 0; for (int i = 0; i < m_numberOfFunctions; i++) { - if (functionAtIndex(i)->layout() != nullptr) { + if (functionAtIndex(i)->isDefined()) { result++; } }