diff --git a/poincare/include/poincare/serialization_helper.h b/poincare/include/poincare/serialization_helper.h index a68f5389e..ac38a895f 100644 --- a/poincare/include/poincare/serialization_helper.h +++ b/poincare/include/poincare/serialization_helper.h @@ -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); }; diff --git a/poincare/src/factorial.cpp b/poincare/src/factorial.cpp index c39f262cd..402b54bd8 100644 --- a/poincare/src/factorial.cpp +++ b/poincare/src/factorial.cpp @@ -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, '!'); diff --git a/poincare/src/serialization_helper.cpp b/poincare/src/serialization_helper.cpp index 595888df5..2f9b1f773 100644 --- a/poincare/src/serialization_helper.cpp +++ b/poincare/src/serialization_helper.cpp @@ -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;