[apps] Remove arg parameter in Shared::Function::nameWithArgument and Shared::CartesianFunction::derivativeNameWithArgument

This commit is contained in:
Ruben Dashyan
2019-07-16 15:33:03 +02:00
committed by Léa Saviot
parent b1b309c0c4
commit b665e841ad
13 changed files with 22 additions and 23 deletions

View File

@@ -23,7 +23,7 @@ void GraphControllerHelper::reloadDerivativeInBannerViewForCursorOnFunction(Shar
constexpr size_t bufferSize = FunctionBannerDelegate::k_maxNumberOfCharacters+PrintFloat::bufferSizeForFloatsWithPrecision(Preferences::LargeNumberOfSignificantDigits); constexpr size_t bufferSize = FunctionBannerDelegate::k_maxNumberOfCharacters+PrintFloat::bufferSizeForFloatsWithPrecision(Preferences::LargeNumberOfSignificantDigits);
char buffer[bufferSize]; char buffer[bufferSize];
const char * space = " "; const char * space = " ";
int numberOfChar = function->derivativeNameWithArgument(buffer, bufferSize, CartesianFunction::Symbol()); int numberOfChar = function->derivativeNameWithArgument(buffer, bufferSize);
const char * legend = "="; const char * legend = "=";
assert(numberOfChar <= bufferSize); assert(numberOfChar <= bufferSize);
numberOfChar += strlcpy(buffer+numberOfChar, legend, bufferSize-numberOfChar); numberOfChar += strlcpy(buffer+numberOfChar, legend, bufferSize-numberOfChar);

View File

@@ -40,7 +40,7 @@ Layout IntegralGraphController::createFunctionLayout(ExpiringPointer<Shared::Fun
constexpr size_t bufferSize = SymbolAbstract::k_maxNameSize+5; // f(x)dx constexpr size_t bufferSize = SymbolAbstract::k_maxNameSize+5; // f(x)dx
char buffer[bufferSize]; char buffer[bufferSize];
const char * dx = "dx"; const char * dx = "dx";
int numberOfChars = function->nameWithArgument(buffer, bufferSize-strlen(dx), CartesianFunction::Symbol()); int numberOfChars = function->nameWithArgument(buffer, bufferSize-strlen(dx));
assert(numberOfChars <= bufferSize); assert(numberOfChars <= bufferSize);
strlcpy(buffer+numberOfChars, dx, bufferSize-numberOfChars); strlcpy(buffer+numberOfChars, dx, bufferSize-numberOfChars);
return LayoutHelper::String(buffer, strlen(buffer), KDFont::SmallFont); return LayoutHelper::String(buffer, strlen(buffer), KDFont::SmallFont);

View File

@@ -25,12 +25,12 @@ void IntersectionGraphController::reloadBannerView() {
const char * legend = "="; const char * legend = "=";
// 'f(x)=g(x)=', keep 2 chars for '=' // 'f(x)=g(x)=', keep 2 chars for '='
ExpiringPointer<CartesianFunction> f = functionStore()->modelForRecord(m_record); ExpiringPointer<CartesianFunction> f = functionStore()->modelForRecord(m_record);
int numberOfChar = f->nameWithArgument(buffer, bufferSize-2, CartesianFunction::Symbol()); int numberOfChar = f->nameWithArgument(buffer, bufferSize-2);
assert(numberOfChar <= bufferSize); assert(numberOfChar <= bufferSize);
numberOfChar += strlcpy(buffer+numberOfChar, legend, bufferSize-numberOfChar); numberOfChar += strlcpy(buffer+numberOfChar, legend, bufferSize-numberOfChar);
// keep 1 char for '='; // keep 1 char for '=';
ExpiringPointer<CartesianFunction> g = functionStore()->modelForRecord(m_intersectedRecord); ExpiringPointer<CartesianFunction> g = functionStore()->modelForRecord(m_intersectedRecord);
numberOfChar += g->nameWithArgument(buffer+numberOfChar, bufferSize-numberOfChar-1, CartesianFunction::Symbol()); numberOfChar += g->nameWithArgument(buffer+numberOfChar, bufferSize-numberOfChar-1);
assert(numberOfChar <= bufferSize); assert(numberOfChar <= bufferSize);
numberOfChar += strlcpy(buffer+numberOfChar, legend, bufferSize-numberOfChar); numberOfChar += strlcpy(buffer+numberOfChar, legend, bufferSize-numberOfChar);
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(m_cursor->y(), buffer+numberOfChar, bufferSize-numberOfChar, Poincare::Preferences::MediumNumberOfSignificantDigits); numberOfChar += PoincareHelpers::ConvertFloatToText<double>(m_cursor->y(), buffer+numberOfChar, bufferSize-numberOfChar, Poincare::Preferences::MediumNumberOfSignificantDigits);

View File

@@ -187,7 +187,7 @@ void ListController::willDisplayExpressionCellAtIndex(HighlightCell * cell, int
void ListController::setFunctionNameInTextField(ExpiringPointer<Function> function, TextField * textField) { void ListController::setFunctionNameInTextField(ExpiringPointer<Function> function, TextField * textField) {
assert(textField != nullptr); assert(textField != nullptr);
char bufferName[BufferTextView::k_maxNumberOfChar]; char bufferName[BufferTextView::k_maxNumberOfChar];
function->nameWithArgument(bufferName, BufferTextView::k_maxNumberOfChar, modelStore()->symbol()); function->nameWithArgument(bufferName, BufferTextView::k_maxNumberOfChar);
textField->setText(bufferName); textField->setText(bufferName);
} }

View File

@@ -18,7 +18,7 @@ DerivativeParameterController::DerivativeParameterController(ValuesController *
} }
void DerivativeParameterController::viewWillAppear() { void DerivativeParameterController::viewWillAppear() {
functionStore()->modelForRecord(m_record)->derivativeNameWithArgument(m_pageTitle, k_maxNumberOfCharsInTitle, Shared::CartesianFunction::Symbol()); functionStore()->modelForRecord(m_record)->derivativeNameWithArgument(m_pageTitle, k_maxNumberOfCharsInTitle);
} }
const char * DerivativeParameterController::title() { const char * DerivativeParameterController::title() {

View File

@@ -49,9 +49,9 @@ void ValuesController::willDisplayCellAtLocation(HighlightCell * cell, int i, in
* after the isDerivativeColumn call, else it will expire. */ * after the isDerivativeColumn call, else it will expire. */
Shared::ExpiringPointer<CartesianFunction> function = functionStore()->modelForRecord(recordAtColumn(i)); Shared::ExpiringPointer<CartesianFunction> function = functionStore()->modelForRecord(recordAtColumn(i));
if (isDerivative) { if (isDerivative) {
function->derivativeNameWithArgument(bufferName, bufferNameSize, CartesianFunction::Symbol()); function->derivativeNameWithArgument(bufferName, bufferNameSize);
} else { } else {
function->nameWithArgument(bufferName, bufferNameSize, CartesianFunction::Symbol()); function->nameWithArgument(bufferName, bufferNameSize);
} }
myFunctionCell->setText(bufferName); myFunctionCell->setText(bufferName);
myFunctionCell->setColor(function->color()); myFunctionCell->setColor(function->color());

View File

@@ -65,10 +65,10 @@ CartesianFunction CartesianFunction::NewModel(Ion::Storage::Record::ErrorStatus
return CartesianFunction(Ion::Storage::sharedStorage()->recordBaseNamedWithExtension(baseName, Ion::Storage::funcExtension)); return CartesianFunction(Ion::Storage::sharedStorage()->recordBaseNamedWithExtension(baseName, Ion::Storage::funcExtension));
} }
int CartesianFunction::derivativeNameWithArgument(char * buffer, size_t bufferSize, CodePoint arg) { int CartesianFunction::derivativeNameWithArgument(char * buffer, size_t bufferSize) {
// Fill buffer with f(x). Keep size for derivative sign. // Fill buffer with f(x). Keep size for derivative sign.
int derivativeSize = UTF8Decoder::CharSizeOfCodePoint('\''); int derivativeSize = UTF8Decoder::CharSizeOfCodePoint('\'');
int numberOfChars = nameWithArgument(buffer, bufferSize - derivativeSize, arg); int numberOfChars = nameWithArgument(buffer, bufferSize - derivativeSize);
assert(numberOfChars + derivativeSize < (int)bufferSize); assert(numberOfChars + derivativeSize < (int)bufferSize);
char * firstParenthesis = const_cast<char *>(UTF8Helper::CodePointSearch(buffer, '(')); char * firstParenthesis = const_cast<char *>(UTF8Helper::CodePointSearch(buffer, '('));
if (!UTF8Helper::CodePointIs(firstParenthesis, '(')) { if (!UTF8Helper::CodePointIs(firstParenthesis, '(')) {

View File

@@ -21,7 +21,7 @@ public:
// Derivative // Derivative
bool displayDerivative() const; bool displayDerivative() const;
void setDisplayDerivative(bool display); void setDisplayDerivative(bool display);
int derivativeNameWithArgument(char * buffer, size_t bufferSize, CodePoint arg); int derivativeNameWithArgument(char * buffer, size_t bufferSize);
double approximateDerivative(double x, Poincare::Context * context) const; double approximateDerivative(double x, Poincare::Context * context) const;
// Integral // Integral
double sumBetweenBounds(double start, double end, Poincare::Context * context) const override; double sumBetweenBounds(double start, double end, Poincare::Context * context) const override;

View File

@@ -64,14 +64,15 @@ void Function::setActive(bool active) {
recordData()->setActive(active); recordData()->setActive(active);
} }
int Function::nameWithArgument(char * buffer, size_t bufferSize, CodePoint arg) { int Function::nameWithArgument(char * buffer, size_t bufferSize) {
assert(UTF8Decoder::CharSizeOfCodePoint(arg) == 1);
const char * functionName = fullName(); const char * functionName = fullName();
size_t baseNameLength = SymbolAbstract::TruncateExtension(buffer, functionName, bufferSize - k_parenthesedArgumentLength); size_t baseNameLength = SymbolAbstract::TruncateExtension(buffer, functionName, bufferSize - k_parenthesedArgumentLength);
assert(baseNameLength <= bufferSize); assert(baseNameLength <= bufferSize);
size_t result = baseNameLength + strlcpy(&buffer[baseNameLength], k_parenthesedArgument, bufferSize-baseNameLength); size_t result = baseNameLength + strlcpy(&buffer[baseNameLength], k_parenthesedArgument, bufferSize-baseNameLength);
if (baseNameLength + 1 < bufferSize) { int bufferRemainingSize = bufferSize - (baseNameLength+1);
UTF8Decoder::CodePointToChars(arg, buffer+baseNameLength+1, bufferSize - (baseNameLength+1)); if (bufferRemainingSize > 0) {
assert(UTF8Decoder::CharSizeOfCodePoint(symbol()) == 1);
UTF8Decoder::CodePointToChars(symbol(), buffer+baseNameLength+1, bufferRemainingSize);
} }
return result; return result;
} }

View File

@@ -33,7 +33,7 @@ public:
void setActive(bool active); void setActive(bool active);
// Name // Name
int nameWithArgument(char * buffer, size_t bufferSize, CodePoint arg); int nameWithArgument(char * buffer, size_t bufferSize);
// Evaluation // Evaluation
virtual float evaluateAtAbscissa(float x, Poincare::Context * context) const { virtual float evaluateAtAbscissa(float x, Poincare::Context * context) const {

View File

@@ -7,13 +7,12 @@ using namespace Poincare;
namespace Shared { namespace Shared {
void FunctionBannerDelegate::reloadBannerViewForCursorOnFunction(CurveViewCursor * cursor, Ion::Storage::Record record, FunctionStore * functionStore) { void FunctionBannerDelegate::reloadBannerViewForCursorOnFunction(CurveViewCursor * cursor, Ion::Storage::Record record, FunctionStore * functionStore) {
CodePoint symbol = functionStore->symbol();
ExpiringPointer<Function> function = functionStore->modelForRecord(record); ExpiringPointer<Function> function = functionStore->modelForRecord(record);
constexpr int bufferSize = k_maxNumberOfCharacters+PrintFloat::bufferSizeForFloatsWithPrecision(Preferences::LargeNumberOfSignificantDigits); constexpr int bufferSize = k_maxNumberOfCharacters+PrintFloat::bufferSizeForFloatsWithPrecision(Preferences::LargeNumberOfSignificantDigits);
char buffer[bufferSize]; char buffer[bufferSize];
const char * space = " "; const char * space = " ";
int numberOfChar = 0; int numberOfChar = 0;
buffer[numberOfChar++] = symbol; buffer[numberOfChar++] = function->symbol();
assert(numberOfChar <= bufferSize); assert(numberOfChar <= bufferSize);
strlcpy(buffer + numberOfChar, "=", bufferSize - numberOfChar); strlcpy(buffer + numberOfChar, "=", bufferSize - numberOfChar);
bannerView()->abscissaSymbol()->setText(buffer); bannerView()->abscissaSymbol()->setText(buffer);
@@ -25,7 +24,7 @@ void FunctionBannerDelegate::reloadBannerViewForCursorOnFunction(CurveViewCursor
strlcpy(buffer+numberOfChar, space, bufferSize - numberOfChar); strlcpy(buffer+numberOfChar, space, bufferSize - numberOfChar);
bannerView()->abscissaValue()->setText(buffer); bannerView()->abscissaValue()->setText(buffer);
numberOfChar = function->nameWithArgument(buffer, bufferSize, symbol); numberOfChar = function->nameWithArgument(buffer, bufferSize);
assert(numberOfChar <= bufferSize); assert(numberOfChar <= bufferSize);
numberOfChar += strlcpy(buffer+numberOfChar, "=", bufferSize-numberOfChar); numberOfChar += strlcpy(buffer+numberOfChar, "=", bufferSize-numberOfChar);
numberOfChar += PoincareHelpers::ConvertFloatToText<double>(cursor->y(), buffer+numberOfChar, bufferSize-numberOfChar, precision); numberOfChar += PoincareHelpers::ConvertFloatToText<double>(cursor->y(), buffer+numberOfChar, bufferSize-numberOfChar, precision);

View File

@@ -9,8 +9,7 @@ const char * ValuesFunctionParameterController::title() {
} }
void ValuesFunctionParameterController::viewWillAppear() { void ValuesFunctionParameterController::viewWillAppear() {
CodePoint symbol = FunctionApp::app()->functionStore()->symbol(); FunctionApp::app()->functionStore()->modelForRecord(m_record)->nameWithArgument(m_pageTitle, Function::k_maxNameWithArgumentSize);
FunctionApp::app()->functionStore()->modelForRecord(m_record)->nameWithArgument(m_pageTitle, Function::k_maxNameWithArgumentSize, symbol);
} }
void ValuesFunctionParameterController::didBecomeFirstResponder() { void ValuesFunctionParameterController::didBecomeFirstResponder() {

View File

@@ -113,8 +113,8 @@ void VariableBoxController::willDisplayCellForIndex(HighlightCell * cell, int in
CartesianFunction f(record); CartesianFunction f(record);
symbolLength = f.nameWithArgument( symbolLength = f.nameWithArgument(
symbolName, symbolName,
Shared::Function::k_maxNameWithArgumentSize, Shared::Function::k_maxNameWithArgumentSize
Shared::CartesianFunction::Symbol()); );
} }
Layout symbolLayout = LayoutHelper::String(symbolName, symbolLength); Layout symbolLayout = LayoutHelper::String(symbolName, symbolLength);
myCell->setLayout(symbolLayout); myCell->setLayout(symbolLayout);