[apps/*/expression_model(_handle)] Remove unknownSymbol()

This commit is contained in:
Ruben Dashyan
2019-07-29 11:03:54 +02:00
committed by Léa Saviot
parent a8810ef066
commit d20d0becc4
5 changed files with 15 additions and 18 deletions

View File

@@ -27,7 +27,6 @@ public:
Function(record),
m_nameLayout() {}
CodePoint symbol() const override { return 'n'; }
CodePoint unknownSymbol() const override { return UCodePointUnknownX; }
void tidy() override;
// MetaData getters
Type type() const;

View File

@@ -15,7 +15,6 @@ public:
Function(record)
{}
CodePoint symbol() const override { return 'x'; }
CodePoint unknownSymbol() const override { return UCodePointUnknownX; }
// Evaluation
float evaluateAtAbscissa(float x, Poincare::Context * context) const override {

View File

@@ -20,13 +20,13 @@ ExpressionModel::ExpressionModel() :
{
}
void ExpressionModel::text(const Storage::Record * record, char * buffer, size_t bufferSize, CodePoint symbol, CodePoint unknownSymbol) const {
void ExpressionModel::text(const Storage::Record * record, char * buffer, size_t bufferSize, CodePoint symbol) const {
Expression e = expressionClone(record);
if (e.isUninitialized() && bufferSize > 0) {
buffer[0] = 0;
} else {
if (symbol != 0 && !e.isUninitialized()) {
e = e.replaceUnknown(Symbol::Builder(unknownSymbol), Symbol::Builder(symbol));
e = e.replaceUnknown(Symbol::Builder(UCodePointUnknownX), Symbol::Builder(symbol));
}
e.serialize(buffer, bufferSize);
}
@@ -58,11 +58,11 @@ Expression ExpressionModel::expressionClone(const Storage::Record * record) cons
return Expression::ExpressionFromAddress(expressionAddress(record), expressionSize(record));
}
Layout ExpressionModel::layout(const Storage::Record * record, CodePoint symbol, CodePoint unknownSymbol) const {
Layout ExpressionModel::layout(const Storage::Record * record, CodePoint symbol) const {
if (m_layout.isUninitialized()) {
Expression clone = expressionClone(record);
if (!clone.isUninitialized() && symbol != 0) {
clone = clone.replaceUnknown(Symbol::Builder(unknownSymbol), Symbol::Builder(symbol));
clone = clone.replaceUnknown(Symbol::Builder(UCodePointUnknownX), Symbol::Builder(symbol));
}
m_layout = PoincareHelpers::CreateLayout(clone);
if (m_layout.isUninitialized()) {
@@ -72,8 +72,8 @@ Layout ExpressionModel::layout(const Storage::Record * record, CodePoint symbol,
return m_layout;
}
Ion::Storage::Record::ErrorStatus ExpressionModel::setContent(Ion::Storage::Record * record, const char * c, CodePoint symbol, CodePoint unknownSymbol) {
Expression e = ExpressionModel::BuildExpressionFromText(c, symbol, unknownSymbol);
Ion::Storage::Record::ErrorStatus ExpressionModel::setContent(Ion::Storage::Record * record, const char * c, CodePoint symbol) {
Expression e = ExpressionModel::BuildExpressionFromText(c, symbol);
return setExpressionContent(record, e);
}
@@ -122,14 +122,14 @@ void ExpressionModel::tidy() const {
m_circular = 0;
}
Poincare::Expression ExpressionModel::BuildExpressionFromText(const char * c, char symbol, char unknownSymbol) {
Poincare::Expression ExpressionModel::BuildExpressionFromText(const char * c, char symbol) {
Expression expressionToStore;
// if c = "", we want to reinit the Expression
if (c && *c != 0) {
// Compute the expression to store, without replacing symbols
expressionToStore = Expression::Parse(c);
if (!expressionToStore.isUninitialized() && symbol != 0) {
expressionToStore = expressionToStore.replaceUnknown(Symbol::Builder(symbol), Symbol::Builder(unknownSymbol));
expressionToStore = expressionToStore.replaceUnknown(Symbol::Builder(symbol), Symbol::Builder(UCodePointUnknownX));
}
}
return expressionToStore;

View File

@@ -12,13 +12,13 @@ public:
ExpressionModel();
// Getters
void text(const Ion::Storage::Record * record, char * buffer, size_t bufferSize, CodePoint symbol = 0, CodePoint unknownSymbol = 0) const;
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, CodePoint unknownSymbol = 0) 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, CodePoint unknownSymbol = 0);
Ion::Storage::Record::ErrorStatus setContent(Ion::Storage::Record * record, const char * c, CodePoint symbol = 0);
Ion::Storage::Record::ErrorStatus setExpressionContent(Ion::Storage::Record * record, Poincare::Expression & e);
// Property
@@ -28,7 +28,7 @@ public:
virtual void tidy() const;
protected:
// Setters helper
static Poincare::Expression BuildExpressionFromText(const char * c, char symbol = 0, char unknownSymbol = 0);
static Poincare::Expression BuildExpressionFromText(const char * c, char symbol = 0);
mutable Poincare::Expression m_expression;
mutable Poincare::Layout m_layout;
private:

View File

@@ -11,13 +11,12 @@ class ExpressionModelHandle : public Ion::Storage::Record {
public:
ExpressionModelHandle(Ion::Storage::Record record = Ion::Storage::Record());
virtual CodePoint symbol() const { return 0; }
virtual CodePoint unknownSymbol() const { return 0; }
// Property
void text(char * buffer, size_t bufferSize) const { return model()->text(this, buffer, bufferSize, symbol(), unknownSymbol()); }
void text(char * buffer, size_t bufferSize) const { return model()->text(this, buffer, bufferSize, symbol()); }
Poincare::Expression expressionReduced(Poincare::Context * context) const { return model()->expressionReduced(this, context); }
Poincare::Expression expressionClone() const { return model()->expressionClone(this); }
Poincare::Layout layout() { return model()->layout(this, symbol(), unknownSymbol()); }
Poincare::Layout layout() { return model()->layout(this, symbol()); }
/* Here, isDefined is the exact contrary of isEmpty. However, for Sequence
* inheriting from ExpressionModelHandle, isEmpty and isDefined have not exactly
* opposite meaning. For instance, u(n+1)=u(n) & u(0) = ... is not empty and
@@ -31,7 +30,7 @@ public:
* behaviour but it is not true for its child classes (for example, in
* Sequence). */
virtual void tidy() { model()->tidy(); }
Ion::Storage::Record::ErrorStatus setContent(const char * c) { return editableModel()->setContent(this, c, symbol(), unknownSymbol()); }
Ion::Storage::Record::ErrorStatus setContent(const char * c) { return editableModel()->setContent(this, c, symbol()); }
Ion::Storage::Record::ErrorStatus setExpressionContent(Poincare::Expression & e) { return editableModel()->setExpressionContent(this, e); }
protected:
bool isCircularlyDefined(Poincare::Context * context) const { return model()->isCircularlyDefined(this, context); }