mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/*/expression_model(_handle)] Remove unknownSymbol()
This commit is contained in:
committed by
Léa Saviot
parent
a8810ef066
commit
d20d0becc4
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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); }
|
||||
|
||||
Reference in New Issue
Block a user