[poincare] Clean Factorial serialization

This commit is contained in:
Léa Saviot
2019-06-24 14:18:01 +02:00
committed by LeaNumworks
parent 2028fca481
commit 23c2358f19
3 changed files with 13 additions and 18 deletions

View File

@@ -34,6 +34,14 @@ namespace SerializationHelper {
int firstChildIndex = 0,
int lastChildIndex = -1);
int SerializeChild(
const TreeNode * childNode,
const TreeNode * parentNode,
char * buffer,
int bufferSize,
Preferences::PrintFloatMode floatDisplayMode,
int numberOfDigits);
// Write one code point in a buffer and a null-terminating char
int CodePoint(char * buffer, int bufferSize, CodePoint c);
};

View File

@@ -67,21 +67,8 @@ Layout FactorialNode::createLayout(Preferences::PrintFloatMode floatDisplayMode,
}
int FactorialNode::serialize(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const {
if (bufferSize == 0) {
return -1;
}
buffer[bufferSize-1] = 0;
int numberOfChar = 0;
if (childNeedsParenthesis(childAtIndex(0))) {
numberOfChar += SerializationHelper::CodePoint(&buffer[numberOfChar], bufferSize-numberOfChar, '(');
if (numberOfChar >= bufferSize-1) { return bufferSize-1; }
}
numberOfChar += childAtIndex(0)->serialize(buffer+numberOfChar, bufferSize-numberOfChar, floatDisplayMode, numberOfSignificantDigits);
if (childNeedsParenthesis(childAtIndex(0))) {
numberOfChar += SerializationHelper::CodePoint(&buffer[numberOfChar], bufferSize-numberOfChar, ')');
if (numberOfChar >= bufferSize-1) { return bufferSize-1; }
}
if (numberOfChar >= bufferSize-1) {
int numberOfChar = SerializationHelper::SerializeChild(childAtIndex(0), this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits);
if ((numberOfChar < 0) || (numberOfChar >= bufferSize-1)) {
return numberOfChar;
}
numberOfChar += SerializationHelper::CodePoint(&buffer[numberOfChar], bufferSize-numberOfChar, '!');

View File

@@ -20,7 +20,7 @@ static bool checkBufferSize(char * buffer, int bufferSize, int * result) {
return false;
}
static int serializeChild(
int SerializationHelper::SerializeChild(
const TreeNode * childNode,
const TreeNode * parentNode,
char * buffer,
@@ -83,7 +83,7 @@ int SerializationHelper::Infix(
assert(numberOfChildren > 0);
// Write the first child, with parentheses if needed
numberOfChar+= serializeChild(node->childAtIndex(firstChildIndex), node, buffer + numberOfChar, bufferSize - numberOfChar, floatDisplayMode, numberOfDigits);
numberOfChar+= SerializeChild(node->childAtIndex(firstChildIndex), node, buffer + numberOfChar, bufferSize - numberOfChar, floatDisplayMode, numberOfDigits);
if (numberOfChar >= bufferSize-1) {
assert(buffer[bufferSize - 1] == 0);
return bufferSize-1;
@@ -98,7 +98,7 @@ int SerializationHelper::Infix(
return bufferSize-1;
}
// Write the child, with parentheses if needed
numberOfChar+= serializeChild(node->childAtIndex(i), node, buffer + numberOfChar, bufferSize - numberOfChar, floatDisplayMode, numberOfDigits);
numberOfChar+= SerializeChild(node->childAtIndex(i), node, buffer + numberOfChar, bufferSize - numberOfChar, floatDisplayMode, numberOfDigits);
if (numberOfChar >= bufferSize-1) {
assert(buffer[bufferSize - 1] == 0);
return bufferSize-1;