From bdef6cc85a89c1aeca92f1a2d5dbe0d69fd6809a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 12 Oct 2018 15:33:36 +0200 Subject: [PATCH] [shared] StorageCartesianFunction: make first default names f, g, h, p --- apps/shared/storage_cartesian_function.cpp | 25 ++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/apps/shared/storage_cartesian_function.cpp b/apps/shared/storage_cartesian_function.cpp index 037e4c818..591124e30 100644 --- a/apps/shared/storage_cartesian_function.cpp +++ b/apps/shared/storage_cartesian_function.cpp @@ -11,25 +11,32 @@ using namespace Poincare; namespace Shared { void StorageCartesianFunction::DefaultName(char buffer[], size_t bufferSize) { - /* a default name is "f[number]", for instance "f12", that does not - * exist yet in the storage */ + constexpr int k_maxNumberOfDefaultLetterNames = 4; + static constexpr const char k_defaultLetterNames[k_maxNumberOfDefaultLetterNames] = { + 'f', 'g', 'h', 'p' + }; + /* First default names are f, g, h, p and then f0, f1... ie, "f[number]", + * for instance "f12", that does not exist yet in the storage. */ size_t constantNameLength = 1; // 'f', no null-terminating char assert(bufferSize > constantNameLength+1); - // Write the f - buffer[0] = 'f'; - // Find the next available number - int currentNumber = 0; - int currentNumberLength = -1; + // Find the next available name + int currentNumber = -k_maxNumberOfDefaultLetterNames; + int currentNumberLength = 0; int availableBufferSize = bufferSize - constantNameLength; while (currentNumberLength < availableBufferSize) { - currentNumberLength = Poincare::Integer(currentNumber).serialize(&buffer[1], availableBufferSize); + // Choose letter + buffer[0] = currentNumber < 0 ? k_defaultLetterNames[k_maxNumberOfDefaultLetterNames+currentNumber] : k_defaultLetterNames[0]; + // Choose number if required + if (currentNumber >= 0) { + currentNumberLength = Poincare::Integer(currentNumber).serialize(&buffer[1], availableBufferSize); + } if (GlobalContext::SymbolAbstractNameIsFree(buffer)) { // Name found break; } currentNumber++; } - assert(currentNumberLength > 0 && currentNumberLength < availableBufferSize); + assert(currentNumberLength >= 0 && currentNumberLength < availableBufferSize); buffer[constantNameLength+currentNumberLength] = 0; }