mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-25 16:50:50 +01:00
[poincare] Clean Factorial serialization
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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, '!');
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user