[unicode] Use Poincare::SerializationHelper::CodePoint

This commit is contained in:
Léa Saviot
2019-03-27 10:32:57 +01:00
committed by Émilie Feral
parent 41b2571668
commit 4bbda406de
5 changed files with 26 additions and 26 deletions

View File

@@ -2,6 +2,7 @@
#include "cache_context.h"
#include "sequence_store.h"
#include <poincare/layout_helper.h>
#include <poincare/serialization_helper.h>
#include <poincare/code_point_layout.h>
#include <poincare/vertical_offset_layout.h>
#include <poincare/integer.h>
@@ -122,11 +123,11 @@ T Sequence::approximateToNextRank(int n, SequenceContext * sqctx) const {
if (n < initialRank() || n < 0) {
return NAN;
}
constexpr int bufferSize = 5;
constexpr int bufferSize = CodePoint::MaxCodePointCharLength + 1;
char unknownN[bufferSize];
int codePointSize = UTF8Decoder::CodePointToChars(UCodePointUnknownN, unknownN, bufferSize);
assert(codePointSize <= bufferSize - 1);
unknownN[codePointSize] = 0;
Poincare::SerializationHelper::CodePoint(unknownN, bufferSize, UCodePointUnknownN);
CacheContext<T> ctx = CacheContext<T>(sqctx);
T un = sqctx->valueOfSequenceAtPreviousRank<T>(0, 0);
T unm1 = sqctx->valueOfSequenceAtPreviousRank<T>(0, 1);

View File

@@ -3,6 +3,7 @@
#include "poincare_helpers.h"
#include <poincare/derivative.h>
#include <poincare/integral.h>
#include <poincare/serialization_helper.h>
#include <escher/palette.h>
#include <ion/unicode/utf8_decoder.h>
#include <float.h>
@@ -104,34 +105,30 @@ double CartesianFunction::sumBetweenBounds(double start, double end, Poincare::C
}
Expression::Coordinate2D CartesianFunction::nextMinimumFrom(double start, double step, double max, Context * context) const {
constexpr int bufferSize = 3;
constexpr int bufferSize = CodePoint::MaxCodePointCharLength + 1;
char unknownX[bufferSize];
int codePointSize = UTF8Decoder::CodePointToChars(UCodePointUnknownX, unknownX, bufferSize);
assert(codePointSize <= bufferSize);
SerializationHelper::CodePoint(unknownX, bufferSize, UCodePointUnknownX);
return PoincareHelpers::NextMinimum(expressionReduced(context), unknownX, start, step, max, *context);
}
Expression::Coordinate2D CartesianFunction::nextMaximumFrom(double start, double step, double max, Context * context) const {
constexpr int bufferSize = 3;
constexpr int bufferSize = CodePoint::MaxCodePointCharLength + 1;
char unknownX[bufferSize];
int codePointSize = UTF8Decoder::CodePointToChars(UCodePointUnknownX, unknownX, bufferSize);
assert(codePointSize <= bufferSize);
SerializationHelper::CodePoint(unknownX, bufferSize, UCodePointUnknownX);
return PoincareHelpers::NextMaximum(expressionReduced(context), unknownX, start, step, max, *context);
}
double CartesianFunction::nextRootFrom(double start, double step, double max, Context * context) const {
constexpr int bufferSize = 3;
constexpr int bufferSize = CodePoint::MaxCodePointCharLength + 1;
char unknownX[bufferSize];
int codePointSize = UTF8Decoder::CodePointToChars(UCodePointUnknownX, unknownX, bufferSize);
assert(codePointSize <= bufferSize);
SerializationHelper::CodePoint(unknownX, bufferSize, UCodePointUnknownX);
return PoincareHelpers::NextRoot(expressionReduced(context), unknownX, start, step, max, *context);
}
Expression::Coordinate2D CartesianFunction::nextIntersectionFrom(double start, double step, double max, Poincare::Context * context, Expression e) const {
constexpr int bufferSize = 3;
constexpr int bufferSize = CodePoint::MaxCodePointCharLength + 1;
char unknownX[bufferSize];
int codePointSize = UTF8Decoder::CodePointToChars(UCodePointUnknownX, unknownX, bufferSize);
assert(codePointSize <= bufferSize);
SerializationHelper::CodePoint(unknownX, bufferSize, UCodePointUnknownX);
return PoincareHelpers::NextIntersection(expressionReduced(context), unknownX, start, step, max, *context, e);
}

View File

@@ -157,7 +157,7 @@ bool SymbolNode::isUnknown(CodePoint unknownSymbol) const {
}
Symbol Symbol::Builder(CodePoint name) {
constexpr int bufferSize = 5;
constexpr int bufferSize = CodePoint::MaxCodePointCharLength + 1;
char buffer[bufferSize];
int codePointSize = UTF8Decoder::CodePointToChars(name, buffer, bufferSize);
assert(codePointSize <= bufferSize);

View File

@@ -8,6 +8,7 @@
#include <poincare/power.h>
#include <poincare/preferences.h>
#include <poincare/rational.h>
#include <poincare/serialization_helper.h>
#include <poincare/sign_function.h>
#include <poincare/subtraction.h>
#include <poincare/symbol.h>
@@ -22,11 +23,11 @@ namespace Poincare {
float Trigonometry::characteristicXRange(const Expression & e, Context & context, Preferences::AngleUnit angleUnit) {
assert(e.numberOfChildren() == 1);
constexpr int size = 5;
char x[size];
int zeroIndex = UTF8Decoder::CodePointToChars(UCodePointUnknownX, x, size);
assert(zeroIndex <= size - 1);
x[zeroIndex] = 0;
constexpr int bufferSize = CodePoint::MaxCodePointCharLength + 1;
char x[bufferSize];
SerializationHelper::CodePoint(x, bufferSize, UCodePointUnknownX);
int d = e.childAtIndex(0).polynomialDegree(context, x);
if (d < 0 || d > 1) {
// child(0) is not linear so we cannot easily find an interesting range

View File

@@ -2,6 +2,7 @@
#include <ion.h>
#include <assert.h>
#include <apps/shared/global_context.h>
#include <poincare/serialization_helper.h>
#include "helper.h"
using namespace Poincare;
@@ -156,11 +157,11 @@ QUIZ_CASE(poincare_user_variable_functions_with_context) {
// f : x→ x^2
assert_simplify("x^2→f(x)");
// Approximate f(?-2) with ? = 5
constexpr int bufferSize = 5;
constexpr int bufferSize = CodePoint::MaxCodePointCharLength + 1;
char x[bufferSize];
int codePointSize = UTF8Decoder::CodePointToChars(UCodePointUnknownX, x, bufferSize);
quiz_assert(codePointSize <= bufferSize - 1);
x[codePointSize] = 0;
Poincare::SerializationHelper::CodePoint(x, bufferSize, UCodePointUnknownX);
assert_parsed_expression_approximates_with_value_for_symbol(Function::Builder("f", 1, Subtraction::Builder(Symbol::Builder(UCodePointUnknownX), Rational::Builder(2))), x, 5.0, 9.0);
// Approximate f(?-1)+f(?+1) with ? = 3
assert_parsed_expression_approximates_with_value_for_symbol(Addition::Builder(Function::Builder("f", 1, Subtraction::Builder(Symbol::Builder(UCodePointUnknownX), Rational::Builder(1))), Function::Builder("f", 1, Addition::Builder(Symbol::Builder(UCodePointUnknownX), Rational::Builder(1)))), x, 3.0, 20.0);