Files
Upsilon/apps/shared/expression_model.h
Ruben Dashyan 5750d00574 [apps/shared] Remove redundant call to isCircularlyDefined
ExpressionModel::expressionReduced does already call isCircularlyDefined
and returns undef if true.
The isCircularlyDefined method is then made private.
2020-02-12 15:13:15 +01:00

41 lines
1.6 KiB
C++

#ifndef SHARED_EXPRESSION_MODEL_H
#define SHARED_EXPRESSION_MODEL_H
#include <poincare/context.h>
#include <poincare/expression.h>
#include <poincare/layout.h>
namespace Shared {
class ExpressionModel {
public:
ExpressionModel();
// Getters
void text(const Ion::Storage::Record * record, char * buffer, size_t bufferSize, CodePoint symbol = 0) const;
Poincare::Expression expressionReduced(const Ion::Storage::Record * record, Poincare::Context * context) const;
Poincare::Expression expressionClone(const Ion::Storage::Record * record) const;
Poincare::Layout layout(const Ion::Storage::Record * record, CodePoint symbol = 0) const;
// Setters
Ion::Storage::Record::ErrorStatus setContent(Ion::Storage::Record * record, const char * c, CodePoint symbol = 0);
Ion::Storage::Record::ErrorStatus setExpressionContent(Ion::Storage::Record * record, const Poincare::Expression & newExpression);
virtual void tidy() const;
protected:
// Setters helper
static Poincare::Expression BuildExpressionFromText(const char * c, CodePoint symbol = 0);
mutable Poincare::Expression m_expression;
mutable Poincare::Layout m_layout;
private:
virtual void updateNewDataWithExpression(Ion::Storage::Record * record, const Poincare::Expression & expressionToStore, void * expressionAddress, size_t expressionToStoreSize, size_t previousExpressionSize);
virtual void * expressionAddress(const Ion::Storage::Record * record) const = 0;
virtual size_t expressionSize(const Ion::Storage::Record * record) const = 0;
bool isCircularlyDefined(const Ion::Storage::Record * record, Poincare::Context * context) const;
mutable int m_circular;
};
}
#endif