mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 08:47:28 +01:00
[unicode] Use Poincare::SerializationHelper::CodePoint
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user