mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[poincare] setExpressionForSymbolName takes a symbol name
This commit is contained in:
@@ -48,8 +48,8 @@ public:
|
||||
const Poincare::Expression expressionForSymbol(const Poincare::Symbol & symbol) override {
|
||||
return m_parentContext->expressionForSymbol(symbol);
|
||||
}
|
||||
void setExpressionForSymbolName(const Poincare::Expression & expression, const Poincare::Symbol & symbol, Poincare::Context & context) override {
|
||||
m_parentContext->setExpressionForSymbolName(expression, symbol, context);
|
||||
void setExpressionForSymbolName(const Poincare::Expression & expression, const char * symbolName, Poincare::Context & context) override {
|
||||
m_parentContext->setExpressionForSymbolName(expression, symbolName, context);
|
||||
}
|
||||
template<typename T> T valueOfSequenceAtPreviousRank(int sequenceIndex, int rank) const {
|
||||
if (sizeof(T) == sizeof(float)) {
|
||||
|
||||
@@ -7,8 +7,8 @@ using namespace Poincare;
|
||||
|
||||
namespace Shared {
|
||||
|
||||
void StoreContext::setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) {
|
||||
m_parentContext->setExpressionForSymbolName(expression, symbol, context);
|
||||
void StoreContext::setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) {
|
||||
m_parentContext->setExpressionForSymbolName(expression, symbolName, context);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ public:
|
||||
{}
|
||||
void setParentContext(Poincare::Context * parentContext) { m_parentContext = parentContext; }
|
||||
void setSeriesPairIndex(int j) { m_seriesPairIndex = j; }
|
||||
void setExpressionForSymbolName(const Poincare::Expression & expression, const Poincare::Symbol & symbol, Poincare::Context & context) override;
|
||||
void setExpressionForSymbolName(const Poincare::Expression & expression, const char * symbolName, Poincare::Context & context) override;
|
||||
protected:
|
||||
Shared::DoublePairStore * m_store;
|
||||
int m_seriesPairIndex;
|
||||
|
||||
@@ -79,12 +79,12 @@ bool VariableBoxController::ContentViewController::handleEvent(Ion::Events::Even
|
||||
}
|
||||
if (event == Ion::Events::Backspace && m_currentPage != Page::RootMenu) {
|
||||
if (m_currentPage == Page::Scalar) {
|
||||
const Symbol symbol('A'+selectedRow());
|
||||
m_context->setExpressionForSymbolName(Expression(), symbol, *m_context);
|
||||
const char symbolName[2] = {static_cast<char>('A'+selectedRow()), 0};
|
||||
m_context->setExpressionForSymbolName(Expression(), symbolName, *m_context);
|
||||
}
|
||||
if (m_currentPage == Page::Matrix) {
|
||||
const Symbol symbol = Symbol::matrixSymbol('0'+(char)selectedRow());
|
||||
m_context->setExpressionForSymbolName(Expression(), symbol, *m_context);
|
||||
const Symbol symbol = Symbol::matrixSymbol('0'+(char)selectedRow()); // TODO do not build an expression, just compute its name
|
||||
m_context->setExpressionForSymbolName(Expression(), symbol.name(), *m_context);
|
||||
m_matrixLayouts[selectedRow()] = Layout();
|
||||
}
|
||||
m_selectableTableView.reloadData();
|
||||
|
||||
@@ -9,7 +9,7 @@ class Symbol;
|
||||
class Context {
|
||||
public:
|
||||
virtual const Expression expressionForSymbol(const Symbol & symbol) = 0;
|
||||
virtual void setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) = 0;
|
||||
virtual void setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ public:
|
||||
/* The expression recorded in global context is already a expression.
|
||||
* Otherwise, we would need the context and the angle unit to evaluate it */
|
||||
const Expression expressionForSymbol(const Symbol & symbol) override;
|
||||
void setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) override;
|
||||
void setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) override;
|
||||
static constexpr uint16_t k_maxNumberOfExpressions = 36;
|
||||
static constexpr uint16_t k_maxNumberOfFunctions = 10;
|
||||
//TODO static constexpr uint16_t k_maxNumberOfSequences = 10;
|
||||
|
||||
@@ -13,7 +13,7 @@ public:
|
||||
void setApproximationForVariable(T value);
|
||||
|
||||
// Context
|
||||
void setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) override;
|
||||
void setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) override;
|
||||
const Expression expressionForSymbol(const Symbol & symbol) override;
|
||||
|
||||
private:
|
||||
|
||||
@@ -23,16 +23,16 @@ const Expression GlobalContext::expressionForSymbol(const Symbol & symbol) {
|
||||
return ExpressionForRecord(RecordWithName(symbol.name()));
|
||||
}
|
||||
|
||||
void GlobalContext::setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) {
|
||||
void GlobalContext::setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) {
|
||||
/* If the new expression contains the symbol, replace it because it will be
|
||||
* destroyed afterwards (to be able to do A+2->A) */
|
||||
Ion::Storage::Record record = RecordWithName(symbol.name());
|
||||
Ion::Storage::Record record = RecordWithName(symbolName);
|
||||
Expression e = ExpressionForRecord(record);
|
||||
Expression finalExpression = expression.clone().replaceSymbolWithExpression(symbol.name(), e);
|
||||
Expression finalExpression = expression.clone().replaceSymbolWithExpression(symbolName, e);
|
||||
// Delete any record with same name (as it is going to be overriden)
|
||||
record.destroy();
|
||||
|
||||
Ion::Storage::Record::ErrorStatus err = Ion::Storage::sharedStorage()->createRecordWithExtension(symbol.name(), ExtensionForExpression(finalExpression), finalExpression.addressInPool(), finalExpression.size());
|
||||
Ion::Storage::Record::ErrorStatus err = Ion::Storage::sharedStorage()->createRecordWithExtension(symbolName, ExtensionForExpression(finalExpression), finalExpression.addressInPool(), finalExpression.size());
|
||||
if (err != Ion::Storage::Record::ErrorStatus::None) {
|
||||
assert(err == Ion::Storage::Record::ErrorStatus::NotEnoughSpaceAvailable);
|
||||
// TODO: return false to set flag that the file system is full?
|
||||
|
||||
@@ -33,7 +33,7 @@ Layout StoreNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, int
|
||||
template<typename T>
|
||||
Evaluation<T> StoreNode::templatedApproximate(Context& context, Preferences::AngleUnit angleUnit) const {
|
||||
Store s(this);
|
||||
context.setExpressionForSymbolName(s.value(), s.symbol(), context);
|
||||
context.setExpressionForSymbolName(s.value(), s.symbol().name(), context);
|
||||
if (context.expressionForSymbol(s.symbol()).isUninitialized()) {
|
||||
return Complex<T>::Undefined();
|
||||
}
|
||||
@@ -41,7 +41,7 @@ Evaluation<T> StoreNode::templatedApproximate(Context& context, Preferences::Ang
|
||||
}
|
||||
|
||||
Expression Store::shallowReduce(Context & context, Preferences::AngleUnit angleUnit) {
|
||||
context.setExpressionForSymbolName(value(), symbol(), context);
|
||||
context.setExpressionForSymbolName(value(), symbol().name(), context);
|
||||
Expression c1 = childAtIndex(1);
|
||||
replaceWithInPlace(c1);
|
||||
return c1.shallowReduce(context, angleUnit);
|
||||
|
||||
@@ -20,14 +20,14 @@ void VariableContext<T>::setApproximationForVariable(T value) {
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void VariableContext<T>::setExpressionForSymbolName(const Expression & expression, const Symbol & symbol, Context & context) {
|
||||
if (strcmp(symbol.name(), m_name) == 0) {
|
||||
void VariableContext<T>::setExpressionForSymbolName(const Expression & expression, const char * symbolName, Context & context) {
|
||||
if (strcmp(symbolName, m_name) == 0) {
|
||||
if (expression.isUninitialized()) {
|
||||
return;
|
||||
}
|
||||
m_value = Float<T>(expression.approximateToScalar<T>(context, Preferences::sharedPreferences()->angleUnit()));
|
||||
} else {
|
||||
m_parentContext->setExpressionForSymbolName(expression, symbol, context);
|
||||
m_parentContext->setExpressionForSymbolName(expression, symbolName, context);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user