diff --git a/apps/graph/graph/integral_graph_controller.cpp b/apps/graph/graph/integral_graph_controller.cpp index c83d43113..5ebb852a1 100644 --- a/apps/graph/graph/integral_graph_controller.cpp +++ b/apps/graph/graph/integral_graph_controller.cpp @@ -1,6 +1,6 @@ #include "integral_graph_controller.h" #include "../../shared/text_field_delegate.h" -#include +#include #include "../app.h" #include @@ -39,7 +39,7 @@ double IntegralGraphController::cursorNextStep(double x, int direction) { ExpressionLayout * IntegralGraphController::createFunctionLayout(const char * functionName) { char buffer[7] = "0(x)dx"; buffer[0] = functionName[0]; - return LayoutEngine::createStringLayout(buffer, strlen(buffer), KDText::FontSize::Small); + return LayoutHelper::String(buffer, strlen(buffer), KDText::FontSize::Small); } } diff --git a/apps/sequence/list/sequence_toolbox.cpp b/apps/sequence/list/sequence_toolbox.cpp index 896970ca7..ae6865cb3 100644 --- a/apps/sequence/list/sequence_toolbox.cpp +++ b/apps/sequence/list/sequence_toolbox.cpp @@ -3,7 +3,7 @@ #include "../../../poincare/src/layout/char_layout.h" #include "../../../poincare/src/layout/horizontal_layout.h" #include "../../../poincare/src/layout/vertical_offset_layout.h" -#include +#include #include using namespace Poincare; @@ -93,18 +93,18 @@ void SequenceToolbox::buildExtraCellsLayouts(const char * sequenceName, int recu const char * indice = j == 0 ? "n" : "n+1"; m_addedCellLayout[j] = new HorizontalLayout( new CharLayout(sequenceName[0], KDText::FontSize::Large), - new VerticalOffsetLayout(LayoutEngine::createStringLayout(indice, strlen(indice), KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), + new VerticalOffsetLayout(LayoutHelper::String(indice, strlen(indice), KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), false); m_addedCellLayout[j+recurrenceDepth] = new HorizontalLayout( new CharLayout(otherSequenceName[0], KDText::FontSize::Large), - new VerticalOffsetLayout(LayoutEngine::createStringLayout(indice, strlen(indice), KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), + new VerticalOffsetLayout(LayoutHelper::String(indice, strlen(indice), KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), false); } if (recurrenceDepth < 2) { const char * indice = recurrenceDepth == 0 ? "n" : (recurrenceDepth == 1 ? "n+1" : "n+2"); m_addedCellLayout[2*recurrenceDepth] = new HorizontalLayout( new CharLayout(otherSequenceName[0], KDText::FontSize::Large), - new VerticalOffsetLayout(LayoutEngine::createStringLayout(indice, strlen(indice), KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), + new VerticalOffsetLayout(LayoutHelper::String(indice, strlen(indice), KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), false); } } diff --git a/apps/sequence/list/type_parameter_controller.cpp b/apps/sequence/list/type_parameter_controller.cpp index 21d8229b1..32bdfa838 100644 --- a/apps/sequence/list/type_parameter_controller.cpp +++ b/apps/sequence/list/type_parameter_controller.cpp @@ -2,7 +2,7 @@ #include "list_controller.h" #include "../app.h" #include -#include +#include #include "../../../poincare/src/layout/char_layout.h" #include "../../../poincare/src/layout/horizontal_layout.h" #include "../../../poincare/src/layout/vertical_offset_layout.h" @@ -131,7 +131,7 @@ void TypeParameterController::willDisplayCellAtLocation(HighlightCell * cell, in } m_expressionLayouts[j] = new HorizontalLayout( new CharLayout(nextName[0], size), - new VerticalOffsetLayout(LayoutEngine::createStringLayout(subscripts[j], strlen(subscripts[j]), size), VerticalOffsetLayout::Type::Subscript, false), + new VerticalOffsetLayout(LayoutHelper::String(subscripts[j], strlen(subscripts[j]), size), VerticalOffsetLayout::Type::Subscript, false), false); ExpressionTableCellWithPointer * myCell = (ExpressionTableCellWithPointer *)cell; myCell->setExpressionLayout(m_expressionLayouts[j]); diff --git a/apps/sequence/sequence.cpp b/apps/sequence/sequence.cpp index 28c05bd95..31d80cb84 100644 --- a/apps/sequence/sequence.cpp +++ b/apps/sequence/sequence.cpp @@ -1,7 +1,7 @@ #include "sequence.h" #include "sequence_store.h" #include "cache_context.h" -#include +#include #include "../../poincare/src/layout/char_layout.h" #include "../../poincare/src/layout/horizontal_layout.h" #include "../../poincare/src/layout/vertical_offset_layout.h" @@ -233,19 +233,19 @@ Poincare::ExpressionLayout * Sequence::definitionName() { if (m_type == Type::Explicit) { m_definitionName = new HorizontalLayout( new CharLayout(name()[0], KDText::FontSize::Large), - new VerticalOffsetLayout(LayoutEngine::createStringLayout("n", 1, KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), + new VerticalOffsetLayout(LayoutHelper::String("n", 1, KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), false); } if (m_type == Type::SingleRecurrence) { m_definitionName = new HorizontalLayout( new CharLayout(name()[0], KDText::FontSize::Large), - new VerticalOffsetLayout(LayoutEngine::createStringLayout("n+1", 3, KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), + new VerticalOffsetLayout(LayoutHelper::String("n+1", 3, KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), false); } if (m_type == Type::DoubleRecurrence) { m_definitionName = new HorizontalLayout( new CharLayout(name()[0], KDText::FontSize::Large), - new VerticalOffsetLayout(LayoutEngine::createStringLayout("n+2", 3, KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), + new VerticalOffsetLayout(LayoutHelper::String("n+2", 3, KDText::FontSize::Large), VerticalOffsetLayout::Type::Subscript, false), false); } } @@ -259,7 +259,7 @@ Poincare::ExpressionLayout * Sequence::firstInitialConditionName() { && (m_type == Type::SingleRecurrence || m_type == Type::DoubleRecurrence)) { - ExpressionLayout * indexLayout = LayoutEngine::createStringLayout(buffer, strlen(buffer), KDText::FontSize::Large); + ExpressionLayout * indexLayout = LayoutHelper::String(buffer, strlen(buffer), KDText::FontSize::Large); m_firstInitialConditionName = new HorizontalLayout( new CharLayout(name()[0], KDText::FontSize::Large), new VerticalOffsetLayout(indexLayout, VerticalOffsetLayout::Type::Subscript, false), @@ -273,7 +273,7 @@ Poincare::ExpressionLayout * Sequence::secondInitialConditionName() { Integer(m_initialRank+1).writeTextInBuffer(buffer, k_initialRankNumberOfDigits+1); if (m_secondInitialConditionName == nullptr) { if (m_type == Type::DoubleRecurrence) { - ExpressionLayout * indexLayout = LayoutEngine::createStringLayout(buffer, strlen(buffer), KDText::FontSize::Large); + ExpressionLayout * indexLayout = LayoutHelper::String(buffer, strlen(buffer), KDText::FontSize::Large); m_secondInitialConditionName = new HorizontalLayout( new CharLayout(name()[0], KDText::FontSize::Large), new VerticalOffsetLayout(indexLayout, VerticalOffsetLayout::Type::Subscript, false), diff --git a/apps/settings/helpers.cpp b/apps/settings/helpers.cpp index 2581a0a4c..d3ac241f3 100644 --- a/apps/settings/helpers.cpp +++ b/apps/settings/helpers.cpp @@ -1,5 +1,5 @@ #include "helpers.h" -#include +#include #include #include "../../poincare/src/layout/horizontal_layout.h" #include "../../poincare/src/layout/vertical_offset_layout.h" @@ -11,15 +11,15 @@ namespace Helpers { ExpressionLayout * CartesianComplexFormat(KDText::FontSize fontSize) { const char text[] = {'a','+', Ion::Charset::IComplex, 'b', ' '}; - return LayoutEngine::createStringLayout(text, sizeof(text), fontSize); + return LayoutHelper::String(text, sizeof(text), fontSize); } ExpressionLayout * PolarComplexFormat(KDText::FontSize fontSize) { const char base[] = {'r', Ion::Charset::Exponential}; const char superscript[] = {Ion::Charset::IComplex, Ion::Charset::SmallTheta, ' '}; return new HorizontalLayout( - LayoutEngine::createStringLayout(base, sizeof(base), fontSize), - new VerticalOffsetLayout(LayoutEngine::createStringLayout(superscript, sizeof(superscript), fontSize), VerticalOffsetLayout::Type::Superscript, false), + LayoutHelper::String(base, sizeof(base), fontSize), + new VerticalOffsetLayout(LayoutHelper::String(superscript, sizeof(superscript), fontSize), VerticalOffsetLayout::Type::Superscript, false), false); } diff --git a/apps/shared/sum_graph_controller.cpp b/apps/shared/sum_graph_controller.cpp index 86539897f..1fd0c32fd 100644 --- a/apps/shared/sum_graph_controller.cpp +++ b/apps/shared/sum_graph_controller.cpp @@ -1,6 +1,6 @@ #include "sum_graph_controller.h" #include "../apps_container.h" -#include +#include #include "poincare_helpers.h" #include @@ -233,32 +233,32 @@ void SumGraphController::LegendView::setSumSymbol(Step step, double start, doubl assert(step == Step::Result || functionLayout == nullptr); const char sigma[] = {' ', m_sumSymbol}; if (step == Step::FirstParameter) { - m_sumLayoutRef = LayoutEngine::createStringLayout(sigma, sizeof(sigma)); + m_sumLayoutRef = LayoutHelper::String(sigma, sizeof(sigma)); } else if (step == Step::SecondParameter) { char buffer[PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits)]; PrintFloat::convertFloatToText(start, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits, Preferences::PrintFloatMode::Decimal); - m_sumLayoutRef = LayoutEngine::createStringLayout(sigma, sizeof(sigma));/* TODO new CondensedSumLayout( - LayoutEngine::createStringLayout(sigma, sizeof(sigma)), - LayoutEngine::createStringLayout(buffer, strlen(buffer), KDText::FontSize::Small), + m_sumLayoutRef = LayoutHelper::String(sigma, sizeof(sigma));/* TODO new CondensedSumLayout( + LayoutHelper::String(sigma, sizeof(sigma)), + LayoutHelper::String(buffer, strlen(buffer), KDText::FontSize::Small), new EmptyLayout(EmptyLayout::Color::Yellow, false, KDText::FontSize::Small, false), false); */ } else { - m_sumLayoutRef = LayoutEngine::createStringLayout(sigma, sizeof(sigma)); + m_sumLayoutRef = LayoutHelper::String(sigma, sizeof(sigma)); /* TODO char buffer[2+PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)]; PrintFloat::convertFloatToText(start, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits, Preferences::PrintFloatMode::Decimal); - ExpressionLayout * start = LayoutEngine::createStringLayout(buffer, strlen(buffer), KDText::FontSize::Small); + ExpressionLayout * start = LayoutHelper::String(buffer, strlen(buffer), KDText::FontSize::Small); PrintFloat::convertFloatToText(end, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits, Preferences::PrintFloatMode::Decimal); - ExpressionLayout * end = LayoutEngine::createStringLayout(buffer, strlen(buffer), KDText::FontSize::Small); + ExpressionLayout * end = LayoutHelper::String(buffer, strlen(buffer), KDText::FontSize::Small); m_sumLayoutRef = new CondensedSumLayout( - LayoutEngine::createStringLayout(sigma, sizeof(sigma)), + LayoutHelper::String(sigma, sizeof(sigma)), start, end, false); ExpressionLayout * childrenLayouts[3]; strlcpy(buffer, "= ", 3); PoincareHelpers::ConvertFloatToText(result, buffer+2, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); - childrenLayouts[2] = LayoutEngine::createStringLayout(buffer, strlen(buffer), KDText::FontSize::Small); + childrenLayouts[2] = LayoutHelper::String(buffer, strlen(buffer), KDText::FontSize::Small); childrenLayouts[1] = functionLayout; childrenLayouts[0] = m_sumLayoutRef; m_sumLayoutRef = new HorizontalLayout(childrenLayouts, 3, false);*/ diff --git a/apps/solver/equation_models_parameter_controller.cpp b/apps/solver/equation_models_parameter_controller.cpp index 347457e84..9f9178e66 100644 --- a/apps/solver/equation_models_parameter_controller.cpp +++ b/apps/solver/equation_models_parameter_controller.cpp @@ -2,7 +2,7 @@ #include "list_controller.h" #include "../constant.h" #include -#include +#include #include "../i18n.h" using namespace Poincare; diff --git a/apps/solver/solutions_controller.cpp b/apps/solver/solutions_controller.cpp index a6eeb6110..0cb4cbad5 100644 --- a/apps/solver/solutions_controller.cpp +++ b/apps/solver/solutions_controller.cpp @@ -66,9 +66,9 @@ SolutionsController::SolutionsController(Responder * parentResponder, EquationSt m_delta2Layout(nullptr), m_contentView(this) { - m_delta2Layout = new HorizontalLayout(new VerticalOffsetLayout(new CharLayout('2', KDText::FontSize::Small), VerticalOffsetLayout::Type::Superscript, false), LayoutEngine::createStringLayout("-4ac", 4, KDText::FontSize::Small), false); + m_delta2Layout = new HorizontalLayout(new VerticalOffsetLayout(new CharLayout('2', KDText::FontSize::Small), VerticalOffsetLayout::Type::Superscript, false), LayoutHelper::String("-4ac", 4, KDText::FontSize::Small), false); char deltaB[] = {Ion::Charset::CapitalDelta, '=', 'b'}; - static_cast(m_delta2Layout)->addOrMergeChildAtIndex(LayoutEngine::createStringLayout(deltaB, 3, KDText::FontSize::Small), 0, false); + static_cast(m_delta2Layout)->addOrMergeChildAtIndex(LayoutHelper::String(deltaB, 3, KDText::FontSize::Small), 0, false); for (int i = 0; i < EquationStore::k_maxNumberOfExactSolutions; i++) { m_exactValueCells[i].setParentResponder(m_contentView.selectableTableView()); } diff --git a/poincare/Makefile b/poincare/Makefile index e9d692ff6..c19891377 100644 --- a/poincare/Makefile +++ b/poincare/Makefile @@ -39,7 +39,7 @@ objs += $(addprefix poincare/src/,\ objs += $(addprefix poincare/src/,\ absolute_value.o\ addition.o\ - approximation_engine.o\ + approximation_helper.o\ arc_cosine.o\ arc_sine.o\ arc_tangent.o\ @@ -79,7 +79,7 @@ objs += $(addprefix poincare/src/,\ imaginary_part.o\ integer.o\ integral.o\ - layout_engine.o\ + layout_helper.o\ list_data.o\ least_common_multiple.o\ logarithm.o\ @@ -106,7 +106,7 @@ objs += $(addprefix poincare/src/,\ real_part.o\ round.o\ sequence.o\ - simplification_engine.o\ + simplification_helper.o\ sine.o\ square_root.o\ static_hierarchy.o\ diff --git a/poincare/include/poincare/absolute_value.h b/poincare/include/poincare/absolute_value.h index edf35d2a4..05545d082 100644 --- a/poincare/include/poincare/absolute_value.h +++ b/poincare/include/poincare/absolute_value.h @@ -2,8 +2,8 @@ #define POINCARE_ABSOLUTE_VALUE_H #include -#include -#include +#include +#include namespace Poincare { @@ -17,17 +17,17 @@ private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "abs"); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "abs"); } /* Simplification */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/absolute_value_layout_node.h b/poincare/include/poincare/absolute_value_layout_node.h index 99c7ba16f..1b0c3968b 100644 --- a/poincare/include/poincare/absolute_value_layout_node.h +++ b/poincare/include/poincare/absolute_value_layout_node.h @@ -9,7 +9,7 @@ class AbsoluteValueLayoutNode : public BracketPairLayoutNode { public: using BracketPairLayoutNode::BracketPairLayoutNode; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixSerializableRefTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "abs"); + return SerializationHelper::Prefix(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "abs"); } // TreeNode size_t size() const override { return sizeof(AbsoluteValueLayoutNode); } diff --git a/poincare/include/poincare/addition.h b/poincare/include/poincare/addition.h index d1dcd7512..34d718954 100644 --- a/poincare/include/poincare/addition.h +++ b/poincare/include/poincare/addition.h @@ -3,8 +3,8 @@ #include #include -#include -#include +#include +#include namespace Poincare { @@ -23,19 +23,19 @@ public: /* Evaluation */ template static std::complex compute(const std::complex c, const std::complex d); template static MatrixComplex computeOnMatrices(const MatrixComplex m, const MatrixComplex n) { - return ApproximationEngine::elementWiseOnComplexMatrices(m, n, compute); + return ApproximationHelper::ElementWiseOnComplexMatrices(m, n, compute); } template static MatrixComplex computeOnComplexAndMatrix(const std::complex c, const MatrixComplex m) { - return ApproximationEngine::elementWiseOnMatrixComplexAndComplex(m, c, compute); + return ApproximationHelper::ElementWiseOnMatrixComplexAndComplex(m, c, compute); } private: /* Layout */ bool needsParenthesisWithParent(SerializableNode * parentNode) const override; LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createInfixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Infix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } static const char * name() { return "+"; } @@ -48,13 +48,13 @@ private: static bool TermsHaveIdenticalNonRationalFactors(const Expression * e1, const Expression * e2); /* Evaluation */ template static MatrixComplex computeOnMatrixAndComplex(const MatrixComplex m, const std::complex c) { - return ApproximationEngine::elementWiseOnMatrixComplexAndComplex(m, c, compute); + return ApproximationHelper::ElementWiseOnMatrixComplexAndComplex(m, c, compute); } Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::mapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); + return ApproximationHelper::MapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::mapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); + return ApproximationHelper::MapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); } }; diff --git a/poincare/include/poincare/approximation_engine.h b/poincare/include/poincare/approximation_helper.h similarity index 76% rename from poincare/include/poincare/approximation_engine.h rename to poincare/include/poincare/approximation_helper.h index 1b2114f6e..fe2c5487b 100644 --- a/poincare/include/poincare/approximation_engine.h +++ b/poincare/include/poincare/approximation_helper.h @@ -1,5 +1,5 @@ -#ifndef POINCARE_APPROXIMATION_ENGINE_H -#define POINCARE_APPROXIMATION_ENGINE_H +#ifndef POINCARE_APPROXIMATION_HELPER_H +#define POINCARE_APPROXIMATION_HELPER_H #include #include @@ -8,22 +8,20 @@ namespace Poincare { -class ApproximationEngine { -public: - template static std::complex truncateRealOrImaginaryPartAccordingToArgument(std::complex c); +namespace ApproximationHelper { + template static std::complex TruncateRealOrImaginaryPartAccordingToArgument(std::complex c); template using ComplexCompute = Complex(*)(const std::complex, Preferences::AngleUnit angleUnit); - template static Evaluation map(const ExpressionNode * expression, Context& context, Preferences::AngleUnit angleUnit, ComplexCompute compute); + template static Evaluation Map(const ExpressionNode * expression, Context& context, Preferences::AngleUnit angleUnit, ComplexCompute compute); template using ComplexAndComplexReduction = Complex(*)(const std::complex, const std::complex); template using ComplexAndMatrixReduction = MatrixComplex(*)(const std::complex c, const MatrixComplex m); template using MatrixAndComplexReduction = MatrixComplex(*)(const MatrixComplex m, const std::complex c); template using MatrixAndMatrixReduction = MatrixComplex(*)(const MatrixComplex m, const MatrixComplex n); - template static Evaluation mapReduce(const ExpressionNode * expression, Context& context, Preferences::AngleUnit angleUnit, ComplexAndComplexReduction computeOnComplexes, ComplexAndMatrixReduction computeOnComplexAndMatrix, MatrixAndComplexReduction computeOnMatrixAndComplex, MatrixAndMatrixReduction computeOnMatrices); - - template static MatrixComplex elementWiseOnMatrixComplexAndComplex(const MatrixComplex n, std::complex c, ComplexAndComplexReduction computeOnComplexes); - template static MatrixComplex elementWiseOnComplexMatrices(const MatrixComplex m, const MatrixComplex n, ComplexAndComplexReduction computeOnComplexes); + template static Evaluation MapReduce(const ExpressionNode * expression, Context& context, Preferences::AngleUnit angleUnit, ComplexAndComplexReduction computeOnComplexes, ComplexAndMatrixReduction computeOnComplexAndMatrix, MatrixAndComplexReduction computeOnMatrixAndComplex, MatrixAndMatrixReduction computeOnMatrices); + template static MatrixComplex ElementWiseOnMatrixComplexAndComplex(const MatrixComplex n, std::complex c, ComplexAndComplexReduction computeOnComplexes); + template static MatrixComplex ElementWiseOnComplexMatrices(const MatrixComplex m, const MatrixComplex n, ComplexAndComplexReduction computeOnComplexes); }; } diff --git a/poincare/include/poincare/arc_cosine.h b/poincare/include/poincare/arc_cosine.h index a1c2be8ad..e3c6c23fa 100644 --- a/poincare/include/poincare/arc_cosine.h +++ b/poincare/include/poincare/arc_cosine.h @@ -1,9 +1,9 @@ #ifndef POINCARE_ARC_COSINE_H #define POINCARE_ARC_COSINE_H -#include +#include #include -#include +#include #include namespace Poincare { @@ -15,10 +15,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "acos"; @@ -28,10 +28,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/arc_sine.h b/poincare/include/poincare/arc_sine.h index 1bbb2a2b0..20c41bd5e 100644 --- a/poincare/include/poincare/arc_sine.h +++ b/poincare/include/poincare/arc_sine.h @@ -1,9 +1,9 @@ #ifndef POINCARE_ARC_SINE_H #define POINCARE_ARC_SINE_H -#include +#include #include -#include +#include #include namespace Poincare { @@ -15,10 +15,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "asin"; } /* Simplification */ @@ -26,10 +26,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/arc_tangent.h b/poincare/include/poincare/arc_tangent.h index ba82d0c21..097e4e6f5 100644 --- a/poincare/include/poincare/arc_tangent.h +++ b/poincare/include/poincare/arc_tangent.h @@ -1,9 +1,9 @@ #ifndef POINCARE_ARC_TANGENT_H #define POINCARE_ARC_TANGENT_H -#include +#include #include -#include +#include #include namespace Poincare { @@ -15,10 +15,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "atan"; } /* Simplification */ @@ -26,10 +26,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/binomial_coefficient.h b/poincare/include/poincare/binomial_coefficient.h index a959ec1c0..90990d096 100644 --- a/poincare/include/poincare/binomial_coefficient.h +++ b/poincare/include/poincare/binomial_coefficient.h @@ -2,7 +2,7 @@ #define POINCARE_BINOMIAL_COEFFICIENT_H #include -#include +#include #include namespace Poincare { @@ -17,7 +17,7 @@ private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "binomial"); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "binomial"); } /* Simplification */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/ceiling.h b/poincare/include/poincare/ceiling.h index ea95fdf32..23f803d8a 100644 --- a/poincare/include/poincare/ceiling.h +++ b/poincare/include/poincare/ceiling.h @@ -1,9 +1,9 @@ #ifndef POINCARE_CEILING_H #define POINCARE_CEILING_H -#include +#include #include -#include +#include namespace Poincare { @@ -15,7 +15,7 @@ private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "ceil"; } /* Simplification */ @@ -23,10 +23,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/ceiling_layout_node.h b/poincare/include/poincare/ceiling_layout_node.h index 51898fb00..84c3861a9 100644 --- a/poincare/include/poincare/ceiling_layout_node.h +++ b/poincare/include/poincare/ceiling_layout_node.h @@ -2,7 +2,7 @@ #define POINCARE_CEILING_LAYOUT_NODE_H #include -#include +#include namespace Poincare { @@ -10,7 +10,7 @@ class CeilingLayoutNode : public BracketPairLayoutNode { public: using BracketPairLayoutNode::BracketPairLayoutNode; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixSerializableRefTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "ceil"); + return SerializationHelper::Prefix(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "ceil"); } // TreeNode size_t size() const override { return sizeof(CeilingLayoutNode); } diff --git a/poincare/include/poincare/complex_argument.h b/poincare/include/poincare/complex_argument.h index 76ca77df6..98b067551 100644 --- a/poincare/include/poincare/complex_argument.h +++ b/poincare/include/poincare/complex_argument.h @@ -1,9 +1,9 @@ #ifndef POINCARE_COMPLEX_ARGUMENT_H #define POINCARE_COMPLEX_ARGUMENT_H -#include +#include #include -#include +#include namespace Poincare { @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "arg"; } /* Simplification */ @@ -25,10 +25,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/condensed_sum_layout_node.h b/poincare/include/poincare/condensed_sum_layout_node.h index 4c05fc278..28e0b5117 100644 --- a/poincare/include/poincare/condensed_sum_layout_node.h +++ b/poincare/include/poincare/condensed_sum_layout_node.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include namespace Poincare { @@ -17,7 +17,7 @@ public: void moveCursorLeft(LayoutCursor * cursor, bool * shouldRecomputeLayout) override { assert(false); } void moveCursorRight(LayoutCursor * cursor, bool * shouldRecomputeLayout) override { assert(false); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixSerializableRefTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "sum"); + return SerializationHelper::Prefix(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "sum"); } LayoutNode * layoutToPointWhenInserting() override { diff --git a/poincare/include/poincare/confidence_interval.h b/poincare/include/poincare/confidence_interval.h index 5532fb6c5..d56c43248 100644 --- a/poincare/include/poincare/confidence_interval.h +++ b/poincare/include/poincare/confidence_interval.h @@ -1,7 +1,7 @@ #ifndef POINCARE_CONFIDENCE_INTERVAL_H #define POINCARE_CONFIDENCE_INTERVAL_H -#include +#include #include namespace Poincare { @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } virtual const char * name() const { return "confidence"; } /* Simplification */ diff --git a/poincare/include/poincare/conjugate.h b/poincare/include/poincare/conjugate.h index 3e2c41604..b40bef618 100644 --- a/poincare/include/poincare/conjugate.h +++ b/poincare/include/poincare/conjugate.h @@ -2,8 +2,8 @@ #define POINCARE_CONJUGATE_H #include -#include -#include +#include +#include namespace Poincare { @@ -15,17 +15,17 @@ private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "conj"); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "conj"); } /* Simplification */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/cosine.h b/poincare/include/poincare/cosine.h index de0660352..5358bbe26 100644 --- a/poincare/include/poincare/cosine.h +++ b/poincare/include/poincare/cosine.h @@ -1,9 +1,9 @@ #ifndef POINCARE_COSINE_H #define POINCARE_COSINE_H -#include +#include #include -#include +#include #include #include @@ -19,20 +19,20 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "cos"; } /* Simplication */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; /* Evaluation */ Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/derivative.h b/poincare/include/poincare/derivative.h index 2ced6221c..f0e7ec4c4 100644 --- a/poincare/include/poincare/derivative.h +++ b/poincare/include/poincare/derivative.h @@ -1,7 +1,7 @@ #ifndef POINCARE_DERIVATIVE_H #define POINCARE_DERIVATIVE_H -#include +#include #include #include @@ -15,10 +15,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "diff"; } /* Simplification */ diff --git a/poincare/include/poincare/determinant.h b/poincare/include/poincare/determinant.h index 68ab315be..15f2ded50 100644 --- a/poincare/include/poincare/determinant.h +++ b/poincare/include/poincare/determinant.h @@ -1,7 +1,7 @@ #ifndef POINCARE_DETERMINANT_H #define POINCARE_DETERMINANT_H -#include +#include #include namespace Poincare { @@ -13,10 +13,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "det"; } /* Simplification */ diff --git a/poincare/include/poincare/division.h b/poincare/include/poincare/division.h index dfe0d11d8..902eff4bc 100644 --- a/poincare/include/poincare/division.h +++ b/poincare/include/poincare/division.h @@ -2,8 +2,8 @@ #define POINCARE_DIVISION_H #include -#include -#include +#include +#include namespace Poincare { @@ -21,21 +21,21 @@ private: bool needsParenthesisWithParent(SerializableNode * parentNode) const override; LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "/"); + return LayoutHelper::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "/"); } /* Simplification */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; /* Evaluation */ template static MatrixComplex computeOnMatrixAndComplex(const MatrixComplex m, const std::complex c) { - return ApproximationEngine::elementWiseOnMatrixComplexAndComplex(m, c, compute); + return ApproximationHelper::ElementWiseOnMatrixComplexAndComplex(m, c, compute); } template static MatrixComplex computeOnComplexAndMatrix(const std::complex c, const MatrixComplex n); template static MatrixComplex computeOnMatrices(const MatrixComplex m, const MatrixComplex n); virtual Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::mapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); + return ApproximationHelper::MapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); } virtual Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::mapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); + return ApproximationHelper::MapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); } }; diff --git a/poincare/include/poincare/division_quotient.h b/poincare/include/poincare/division_quotient.h index 4f656d7f6..2ca82d427 100644 --- a/poincare/include/poincare/division_quotient.h +++ b/poincare/include/poincare/division_quotient.h @@ -1,7 +1,7 @@ #ifndef POINCARE_DIVISION_QUOTIENT_H #define POINCARE_DIVISION_QUOTIENT_H -#include +#include #include #include #include @@ -15,10 +15,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "quo"; } /* Simplification */ diff --git a/poincare/include/poincare/division_remainder.h b/poincare/include/poincare/division_remainder.h index 761bcedf8..85dd02743 100644 --- a/poincare/include/poincare/division_remainder.h +++ b/poincare/include/poincare/division_remainder.h @@ -1,7 +1,7 @@ #ifndef POINCARE_DIVISION_REMAINDER_H #define POINCARE_DIVISION_REMAINDER_H -#include +#include #include #include @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "rem"; } /* Simplification */ diff --git a/poincare/include/poincare/equal.h b/poincare/include/poincare/equal.h index e7b3f1689..a43804838 100644 --- a/poincare/include/poincare/equal.h +++ b/poincare/include/poincare/equal.h @@ -3,7 +3,7 @@ #include #include -#include +#include namespace Poincare { @@ -20,7 +20,7 @@ private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "="); + return LayoutHelper::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "="); } /* Evalutation */ Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 5535e84db..8d490165a 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -87,7 +87,7 @@ public: } bool isEqualToItsApproximationLayout(Expression approximation, int bufferSize, Preferences::AngleUnit angleUnit, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits, Context & context); - /* Layout Engine */ + /* Layout Helper */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { return this->node()->createLayout(floatDisplayMode, numberOfSignificantDigits); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const { return this->node()->writeTextInBuffer(buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits); } @@ -95,7 +95,7 @@ public: static Expression ParseAndSimplify(const char * text, Context & context, Preferences::AngleUnit angleUnit); void simplify(Context & context, Preferences::AngleUnit angleUnit); - /* Approximation Engine */ + /* Approximation Helper */ template Expression approximate(Context& context, Preferences::AngleUnit angleUnit, Preferences::Preferences::ComplexFormat complexFormat) const; template U approximateToScalar(Context& context, Preferences::AngleUnit angleUnit) const; template static U approximateToScalar(const char * text, Context& context, Preferences::AngleUnit angleUnit); diff --git a/poincare/include/poincare/expression_node.h b/poincare/include/poincare/expression_node.h index b326de5b7..6eab282ed 100644 --- a/poincare/include/poincare/expression_node.h +++ b/poincare/include/poincare/expression_node.h @@ -14,7 +14,7 @@ namespace Poincare { * Expression. */ class ExpressionNode : public SerializableNode { - friend class ApproximationEngine; + friend class ApproximationHelper; friend class SymbolNode; friend class NAryExpressionNode; public: @@ -138,10 +138,10 @@ public: //TODO: What should be the implementation for complex? virtual int simplificationOrderSameType(const ExpressionNode * e, bool canBeInterrupted) const { return 0; } - /* Layout Engine */ + /* Layout Helper */ virtual LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const = 0; - /* Evaluation Engine */ + /* Evaluation Helper */ typedef float SinglePrecision; typedef double DoublePrecision; constexpr static int k_maxNumberOfSteps = 10000; diff --git a/poincare/include/poincare/factor.h b/poincare/include/poincare/factor.h index 0466cc8bd..57f1f4594 100644 --- a/poincare/include/poincare/factor.h +++ b/poincare/include/poincare/factor.h @@ -1,7 +1,7 @@ #ifndef POINCARE_FACTOR_H #define POINCARE_FACTOR_H -#include +#include #include #include #include @@ -16,10 +16,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "factor"; } /* Simplification */ diff --git a/poincare/include/poincare/factorial.h b/poincare/include/poincare/factorial.h index 14dbb72d2..6524b598a 100644 --- a/poincare/include/poincare/factorial.h +++ b/poincare/include/poincare/factorial.h @@ -2,7 +2,7 @@ #define POINCARE_FACTORIAL_H #include -#include +#include namespace Poincare { @@ -22,10 +22,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } #if 0 diff --git a/poincare/include/poincare/floor.h b/poincare/include/poincare/floor.h index 642cfd198..7c24f10c8 100644 --- a/poincare/include/poincare/floor.h +++ b/poincare/include/poincare/floor.h @@ -1,9 +1,9 @@ #ifndef POINCARE_FLOOR_H #define POINCARE_FLOOR_H -#include +#include #include -#include +#include namespace Poincare { @@ -15,7 +15,7 @@ private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "floor"; } /* Simplification */ @@ -23,10 +23,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/floor_layout_node.h b/poincare/include/poincare/floor_layout_node.h index 1083c1037..0488385f2 100644 --- a/poincare/include/poincare/floor_layout_node.h +++ b/poincare/include/poincare/floor_layout_node.h @@ -2,7 +2,7 @@ #define POINCARE_FLOOR_LAYOUT_NODE_H #include -#include +#include namespace Poincare { @@ -10,7 +10,7 @@ class FloorLayoutNode : public BracketPairLayoutNode { public: using BracketPairLayoutNode::BracketPairLayoutNode; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixSerializableRefTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "floor"); + return SerializationHelper::Prefix(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "floor"); } // TreeNode diff --git a/poincare/include/poincare/frac_part.h b/poincare/include/poincare/frac_part.h index 6b7d22c43..8ca3c529e 100644 --- a/poincare/include/poincare/frac_part.h +++ b/poincare/include/poincare/frac_part.h @@ -1,9 +1,9 @@ #ifndef POINCARE_FRAC_PART_H #define POINCARE_FRAC_PART_H -#include +#include #include -#include +#include namespace Poincare { @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "frac"; } /* Simplification */ @@ -25,10 +25,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/great_common_divisor.h b/poincare/include/poincare/great_common_divisor.h index 5833fe680..69d33bac7 100644 --- a/poincare/include/poincare/great_common_divisor.h +++ b/poincare/include/poincare/great_common_divisor.h @@ -1,7 +1,7 @@ #ifndef POINCARE_GREAT_COMMON_DIVISOR_H #define POINCARE_GREAT_COMMON_DIVISOR_H -#include +#include #include #include @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "gcd"; } /* Simplification */ diff --git a/poincare/include/poincare/hyperbolic_arc_cosine.h b/poincare/include/poincare/hyperbolic_arc_cosine.h index ae06f058e..42d28455e 100644 --- a/poincare/include/poincare/hyperbolic_arc_cosine.h +++ b/poincare/include/poincare/hyperbolic_arc_cosine.h @@ -1,9 +1,9 @@ #ifndef POINCARE_HYPERBOLIC_ARC_COSINE_H #define POINCARE_HYPERBOLIC_ARC_COSINE_H -#include +#include #include -#include +#include namespace Poincare { @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "acosh"; } /* Simplification */ @@ -25,10 +25,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/hyperbolic_arc_sine.h b/poincare/include/poincare/hyperbolic_arc_sine.h index 652c544de..d6bb4f80f 100644 --- a/poincare/include/poincare/hyperbolic_arc_sine.h +++ b/poincare/include/poincare/hyperbolic_arc_sine.h @@ -1,9 +1,9 @@ #ifndef POINCARE_HYPERBOLIC_ARC_SINE_H #define POINCARE_HYPERBOLIC_ARC_SINE_H -#include +#include #include -#include +#include namespace Poincare { @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "asinh"; } /* Simplification */ @@ -25,10 +25,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/hyperbolic_arc_tangent.h b/poincare/include/poincare/hyperbolic_arc_tangent.h index fd67c33fd..f4b02f5c5 100644 --- a/poincare/include/poincare/hyperbolic_arc_tangent.h +++ b/poincare/include/poincare/hyperbolic_arc_tangent.h @@ -1,9 +1,9 @@ #ifndef POINCARE_HYPERBOLIC_ARC_TANGENT_H #define POINCARE_HYPERBOLIC_ARC_TANGENT_H -#include +#include #include -#include +#include namespace Poincare { @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "atanh"; } /* Simplification */ @@ -25,10 +25,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/hyperbolic_cosine.h b/poincare/include/poincare/hyperbolic_cosine.h index 22963d0a7..6ff0a1770 100644 --- a/poincare/include/poincare/hyperbolic_cosine.h +++ b/poincare/include/poincare/hyperbolic_cosine.h @@ -1,9 +1,9 @@ #ifndef POINCARE_HYPERBOLIC_COSINE_H #define POINCARE_HYPERBOLIC_COSINE_H -#include +#include #include -#include +#include namespace Poincare { @@ -15,20 +15,20 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "cosh"; } /* Simplification */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; /* Evaluation */ Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/hyperbolic_sine.h b/poincare/include/poincare/hyperbolic_sine.h index 4008b1971..0d9578459 100644 --- a/poincare/include/poincare/hyperbolic_sine.h +++ b/poincare/include/poincare/hyperbolic_sine.h @@ -1,9 +1,9 @@ #ifndef POINCARE_HYPERBOLIC_SINE_H #define POINCARE_HYPERBOLIC_SINE_H -#include +#include #include -#include +#include namespace Poincare { @@ -15,20 +15,20 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "sinh"; } /* Simplification */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; /* Evaluation */ Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/hyperbolic_tangent.h b/poincare/include/poincare/hyperbolic_tangent.h index 8d7b93065..a28fd80b1 100644 --- a/poincare/include/poincare/hyperbolic_tangent.h +++ b/poincare/include/poincare/hyperbolic_tangent.h @@ -1,9 +1,9 @@ #ifndef POINCARE_HYPERBOLIC_TANGENT_H #define POINCARE_HYPERBOLIC_TANGENT_H -#include +#include #include -#include +#include namespace Poincare { @@ -15,20 +15,20 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "tanh"; } /* Simplification */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; /* Evaluation */ Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/imaginary_part.h b/poincare/include/poincare/imaginary_part.h index d069d1a7d..94c782c4c 100644 --- a/poincare/include/poincare/imaginary_part.h +++ b/poincare/include/poincare/imaginary_part.h @@ -1,9 +1,9 @@ #ifndef POINCARE_IMAGINARY_PART_H #define POINCARE_IMAGINARY_PART_H -#include +#include #include -#include +#include namespace Poincare { @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "im"; } /* Simplification */ @@ -25,10 +25,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/integer.h b/poincare/include/poincare/integer.h index f6eebf579..351b690fd 100644 --- a/poincare/include/poincare/integer.h +++ b/poincare/include/poincare/integer.h @@ -11,8 +11,8 @@ namespace Poincare { class ExpressionLayout; class LayoutReference; class LayoutNode; -class IntegerReference; -struct IntegerDivisionReference; +class Integer; +struct IntegerDivision; typedef uint16_t half_native_uint_t; typedef int32_t native_int_t; @@ -24,8 +24,8 @@ typedef uint64_t double_native_uint_t; * Modern Computer Arithmetic, Richard P. Brent and Paul Zimmermann */ class NaturalIntegerAbstract { -friend class IntegerReference; -friend class RationalReference; +friend class Integer; +friend class Rational; public: // Getters uint32_t digit(int i) const { assert(i < m_numberOfDigits); return digits()[i]; } @@ -43,18 +43,18 @@ public: virtual bool isOne() const { return (m_numberOfDigits == 1 && digit(0) == 1); }; virtual bool isTwo() const { return (m_numberOfDigits == 1 && digit(0) == 2); }; virtual bool isTen() const { return (m_numberOfDigits == 1 && digit(0) == 10); }; - bool isZero() const { return (m_numberOfDigits == 0); }; + virtual bool isZero() const { return (m_numberOfDigits == 0); }; bool isInfinity() const { return m_numberOfDigits > k_maxNumberOfDigits; } - bool isEven() const { return (m_numberOfDigits == 0 || ((digit(0) & 1) == 0)); } + bool isEven() const { return (isZero() || ((digit(0) & 1) == 0)); } // Arithmetic /* buffer has to be k_maxNumberOfDigits+1 to allow ...*/ static int8_t ucmp(const NaturalIntegerAbstract * a, const NaturalIntegerAbstract * b); // -1, 0, or 1 - static IntegerReference usum(const NaturalIntegerAbstract * a, const NaturalIntegerAbstract * b, bool subtract); - static IntegerReference umult(const NaturalIntegerAbstract * a, const NaturalIntegerAbstract * b); - static IntegerDivisionReference udiv(const NaturalIntegerAbstract * a, const NaturalIntegerAbstract * b); - static IntegerReference upow(const NaturalIntegerAbstract * a, const NaturalIntegerAbstract * b); - static IntegerReference ufact(const NaturalIntegerAbstract * a); + static Integer usum(const NaturalIntegerAbstract * a, const NaturalIntegerAbstract * b, bool subtract); + static Integer umult(const NaturalIntegerAbstract * a, const NaturalIntegerAbstract * b); + static IntegerDivision udiv(const NaturalIntegerAbstract * a, const NaturalIntegerAbstract * b); + static Integer upow(const NaturalIntegerAbstract * a, const NaturalIntegerAbstract * b); + static Integer ufact(const NaturalIntegerAbstract * a); constexpr static int k_maxNumberOfDigits = 32; protected: @@ -68,7 +68,7 @@ protected: size_t m_numberOfDigits; // In base native_uint_max private: - static IntegerReference IntegerWithHalfDigitAtIndex(half_native_uint_t halfDigit, int index); + static Integer IntegerWithHalfDigitAtIndex(half_native_uint_t halfDigit, int index); uint16_t numberOfHalfDigits() const { native_uint_t d = digit(m_numberOfDigits-1); @@ -114,7 +114,7 @@ public: Type type() const override { return Type::Integer; } // Simplification - Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit) override; + Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit) override { return Integer(this).shallowReduce(context, angleUnit); } // Approximation Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { return Complex(templatedApproximate()); } @@ -133,7 +133,7 @@ public: // ExpressionNode Sign sign() const override { return m_negative ? Sign::Negative : Sign::Positive; } - Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override; + Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override { Integer(this).setSign(s, context, angleUnit); } void setNegative(bool negative); @@ -152,58 +152,81 @@ private: native_uint_t m_digits[0]; }; +class AllocationFailureIntegerNode : public IntegerNode, public AllocationFailedExpressionNode { +public + // ExpressionNode + using AllocationFailedExpressionNode::type; + using AllocationFailedExpressionNode::approximate; + using AllocationFailedExpressionNode::writeTextInBuffer; + using AllocationFailedExpressionNode::createLayout; + using AllocationFailedExpressionNode::numberOfChildren; + using AllocationFailedExpressionNode::isAllocationFailure; + size_t size() const override { return sizeof(AllocationFailureIntegerNode); } +#if TREE_LOG + const char * description() const override { return "AllocationFailureIntegerNode"; } +#endif -class IntegerReference : public NumberReference { + // IntegerNode + bool isZero() const override { return false; } + void setDigits(native_int_t i) override {} + void setDigits(double_native_int_t i); + void setDigits(const native_uint_t * digits, size_t size, bool negative); +}; + +class Integer : public Number { friend class NaturalIntegerAbstract; friend class NaturalIntegerPointer; friend class IntegerNode; -friend class RationalReference; -friend class DecimalReference; +friend class Rational; +friend class Decimal; public: - IntegerReference(TreeNode * n) : NumberReference(n) {} - IntegerReference(const char * digits, size_t length, bool negative); - IntegerReference(const NaturalIntegerAbstract * naturalInteger); - IntegerReference(native_int_t i); - IntegerReference(double_native_int_t i); - static IntegerReference Overflow() { return IntegerReference((native_uint_t *)nullptr, IntegerNode::k_maxNumberOfDigits+1, false); } + Integer(TreeNode * n) : Number(n) {} + Integer(const char * digits, size_t length, bool negative); + Integer(const NaturalIntegerAbstract * naturalInteger); + Integer(native_int_t i); + Integer(double_native_int_t i); + static Integer Overflow() { return Integer((native_uint_t *)nullptr, IntegerNode::k_maxNumberOfDigits+1, false); } constexpr static int k_maxExtractableInteger = 0x7FFFFFFF; int extractedInt() const; // Comparison - static int NaturalOrder(const IntegerReference i, const IntegerReference j); + static int NaturalOrder(const Integer i, const Integer j); // Properties - bool isZero() const; + virtual bool isZero() const; bool isOne() const; bool isInfinity() const; bool isEven() const; bool isNegative() const { return node()->sign() == ExpressionNode::Sign::Negative; } void setNegative(bool negative); - static int NumberOfBase10Digits(const IntegerReference i); + static int NumberOfBase10Digits(const Integer i); // Arithmetic - static IntegerReference Addition(const IntegerReference i, const IntegerReference j); - static IntegerReference Subtraction(const IntegerReference i, const IntegerReference j); - static IntegerReference Multiplication(const IntegerReference i, const IntegerReference j); - static IntegerDivisionReference Division(const IntegerReference numerator, const IntegerReference denominator); - static IntegerReference Power(const IntegerReference i, const IntegerReference j); - static IntegerReference Factorial(const IntegerReference i); + static Integer Addition(const Integer i, const Integer j); + static Integer Subtraction(const Integer i, const Integer j); + static Integer Multiplication(const Integer i, const Integer j); + static IntegerDivision Division(const Integer numerator, const Integer denominator); + static Integer Power(const Integer i, const Integer j); + static Integer Factorial(const Integer i); private: // TreeNode IntegerNode * typedNode() const { assert(node()->type() == ExpressionNode::Type::Integer); return static_cast(node()); } - IntegerReference(const native_uint_t * digits, size_t numberOfDigits, bool negative); - IntegerReference(size_t size) : NumberReference(TreePool::sharedPool()->createTreeNode(size)) { + Integer(const native_uint_t * digits, size_t numberOfDigits, bool negative); + Integer(size_t size) : Number(TreePool::sharedPool()->createTreeNode(size)) { } - static IntegerReference addition(const IntegerReference a, const IntegerReference b, bool inverseBNegative); + static Integer addition(const Integer a, const Integer b, bool inverseBNegative); size_t numberOfDigits() const { return typedNode()->numberOfDigits(); } uint32_t digit(int i) const { return typedNode()->digit(i); } + + // Simplification + Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit); }; -struct IntegerDivisionReference { - IntegerReference quotient; - IntegerReference remainder; +struct IntegerDivision { + Integer quotient; + Integer remainder; }; } diff --git a/poincare/include/poincare/integral.h b/poincare/include/poincare/integral.h index c53e5a423..f4fac248c 100644 --- a/poincare/include/poincare/integral.h +++ b/poincare/include/poincare/integral.h @@ -3,7 +3,7 @@ #include #include -#include +#include namespace Poincare { @@ -16,7 +16,7 @@ private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "int"); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "int"); } /* Simplification */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/layout_engine.h b/poincare/include/poincare/layout_engine.h deleted file mode 100644 index e90d585f2..000000000 --- a/poincare/include/poincare/layout_engine.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef POINCARE_LAYOUT_ENGINE_H -#define POINCARE_LAYOUT_ENGINE_H - -#include -#include -#include - -namespace Poincare { - -class LayoutEngine { - -public: - /* Expression to Layout */ - static LayoutRef createInfixLayout(const Expression expression, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName); - static LayoutRef createPrefixLayout(const Expression expression, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName); - - /* Create special layouts */ - static LayoutRef createParenthesedLayout(LayoutRef layout, bool cloneLayout); - static HorizontalLayoutRef createStringLayout(const char * buffer, int bufferSize, KDText::FontSize fontSize = KDText::FontSize::Large); - static LayoutRef createLogLayout(LayoutRef argument, LayoutRef index); - - /* SerializableReference to Text */ - static int writeInfixSerializableRefTextInBuffer( - const SerializableReference serializableRef, - char * buffer, - int bufferSize, - Preferences::PrintFloatMode floatDisplayMode, - int numberOfDigits, - const char * operatorName, - int firstChildIndex = 0, - int lastChildIndex = -1); - - static int writePrefixSerializableRefTextInBuffer( - const SerializableReference serializableRef, - char * buffer, - int bufferSize, - Preferences::PrintFloatMode floatDisplayMode, - int numberOfDigits, - const char * operatorName, - bool writeFirstChild = true); - - /* Write one char in buffer */ - static int writeOneCharInBuffer(char * buffer, int bufferSize, char charToWrite); - -private: - static void writeChildTreeInBuffer(SerializableReference childRef, SerializableReference parentRef, char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfDigits, int * numberOfChar); -}; - -} - -#endif diff --git a/poincare/include/poincare/layout_helper.h b/poincare/include/poincare/layout_helper.h new file mode 100644 index 000000000..73a002883 --- /dev/null +++ b/poincare/include/poincare/layout_helper.h @@ -0,0 +1,23 @@ +#ifndef POINCARE_LAYOUT_HELPER_H +#define POINCARE_LAYOUT_HELPER_H + +#include +#include +#include + +namespace Poincare { + +namespace LayoutHelper { + /* Expression to Layout */ + static LayoutRef Infix(const Expression expression, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName); + static LayoutRef Prefix(const Expression expression, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName); + + /* Create special layouts */ + static LayoutRef Parentheses(LayoutRef layout, bool cloneLayout); + static HorizontalLayoutRef String(const char * buffer, int bufferSize, KDText::FontSize fontSize = KDText::FontSize::Large); + static LayoutRef Logarithm(LayoutRef argument, LayoutRef index); +}; + +} + +#endif diff --git a/poincare/include/poincare/least_common_multiple.h b/poincare/include/poincare/least_common_multiple.h index 773fb339a..fb9eeb625 100644 --- a/poincare/include/poincare/least_common_multiple.h +++ b/poincare/include/poincare/least_common_multiple.h @@ -1,7 +1,7 @@ #ifndef POINCARE_LEAST_COMMON_MULTIPLE_H #define POINCARE_LEAST_COMMON_MULTIPLE_H -#include +#include #include #include @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "lcm"; } /* Simplification */ diff --git a/poincare/include/poincare/left_parenthesis_layout_node.h b/poincare/include/poincare/left_parenthesis_layout_node.h index 212363144..70eb4774c 100644 --- a/poincare/include/poincare/left_parenthesis_layout_node.h +++ b/poincare/include/poincare/left_parenthesis_layout_node.h @@ -1,7 +1,7 @@ #ifndef POINCARE_LEFT_PARENTHESIS_LAYOUT_NODE_H #define POINCARE_LEFT_PARENTHESIS_LAYOUT_NODE_H -#include +#include #include namespace Poincare { @@ -18,7 +18,7 @@ public: // Serializable Node int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writeOneCharInBuffer(buffer, bufferSize, '('); + return SerializationHelper::Char(buffer, bufferSize, '('); } // TreeNode diff --git a/poincare/include/poincare/left_square_bracket_layout_node.h b/poincare/include/poincare/left_square_bracket_layout_node.h index 5b9454b1f..a40e02c88 100644 --- a/poincare/include/poincare/left_square_bracket_layout_node.h +++ b/poincare/include/poincare/left_square_bracket_layout_node.h @@ -2,7 +2,7 @@ #define POINCARE_LEFT_SQUARE_BRACKET_LAYOUT_NODE_H #include -#include +#include namespace Poincare { @@ -10,7 +10,7 @@ class LeftSquareBracketLayoutNode : public SquareBracketLayoutNode { public: using SquareBracketLayoutNode::SquareBracketLayoutNode; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writeOneCharInBuffer(buffer, bufferSize, '['); + return SerializationHelper::Char(buffer, bufferSize, '['); } bool isLeftBracket() const override { return true; } diff --git a/poincare/include/poincare/logarithm.h b/poincare/include/poincare/logarithm.h index 42ac61229..210e5f30e 100644 --- a/poincare/include/poincare/logarithm.h +++ b/poincare/include/poincare/logarithm.h @@ -1,7 +1,7 @@ #ifndef POINCARE_LOGARITHM_H #define POINCARE_LOGARITHM_H -#include +#include #include #include @@ -16,7 +16,7 @@ private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "log"); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "log"); } /* Simplification */ Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/matrix_dimension.h b/poincare/include/poincare/matrix_dimension.h index 48fe9bff9..c1be4f52c 100644 --- a/poincare/include/poincare/matrix_dimension.h +++ b/poincare/include/poincare/matrix_dimension.h @@ -1,7 +1,7 @@ #ifndef POINCARE_MATRIX_DIMENSION_H #define POINCARE_MATRIX_DIMENSION_H -#include +#include #include namespace Poincare { @@ -13,10 +13,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "dim"; } /* Simplification */ diff --git a/poincare/include/poincare/matrix_inverse.h b/poincare/include/poincare/matrix_inverse.h index e9bda8d08..48748e461 100644 --- a/poincare/include/poincare/matrix_inverse.h +++ b/poincare/include/poincare/matrix_inverse.h @@ -1,7 +1,7 @@ #ifndef POINCARE_MATRIX_INVERSE_H #define POINCARE_MATRIX_INVERSE_H -#include +#include #include namespace Poincare { @@ -13,10 +13,10 @@ public: private: /* Evaluation */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "inverse"; } /* Simplification */ diff --git a/poincare/include/poincare/matrix_trace.h b/poincare/include/poincare/matrix_trace.h index f5ce4f15c..b34d3b2a0 100644 --- a/poincare/include/poincare/matrix_trace.h +++ b/poincare/include/poincare/matrix_trace.h @@ -1,7 +1,7 @@ #ifndef POINCARE_MATRIX_TRACE_H #define POINCARE_MATRIX_TRACE_H -#include +#include #include #include @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "trace"; } /* Simplification */ diff --git a/poincare/include/poincare/matrix_transpose.h b/poincare/include/poincare/matrix_transpose.h index 837811140..be19652a8 100644 --- a/poincare/include/poincare/matrix_transpose.h +++ b/poincare/include/poincare/matrix_transpose.h @@ -1,7 +1,7 @@ #ifndef POINCARE_MATRIX_TRANSPOSE_H #define POINCARE_MATRIX_TRANSPOSE_H -#include +#include #include namespace Poincare { @@ -13,10 +13,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "transpose"; } /* Simplification */ diff --git a/poincare/include/poincare/multiplication.h b/poincare/include/poincare/multiplication.h index ef7016a55..77567f03d 100644 --- a/poincare/include/poincare/multiplication.h +++ b/poincare/include/poincare/multiplication.h @@ -2,8 +2,8 @@ #define POINCARE_MULTIPLICATION_H #include -#include -#include +#include +#include namespace Poincare { @@ -26,7 +26,7 @@ public: /* Evaluation */ template static std::complex compute(const std::complex c, const std::complex d); template static MatrixComplex computeOnComplexAndMatrix(const std::complex c, const MatrixComplex m) { - return ApproximationEngine::elementWiseOnMatrixComplexAndComplex(m, c, compute); + return ApproximationHelper::ElementWiseOnMatrixComplexAndComplex(m, c, compute); } template static void computeOnArrays(T * m, T * n, T * result, int mNumberOfColumns, int mNumberOfRows, int nNumberOfColumns); template static MatrixComplex computeOnMatrices(const MatrixComplex m, const MatrixComplex n); @@ -59,13 +59,13 @@ private: /* Evaluation */ template static MatrixComplex computeOnMatrixAndComplex(const MatrixComplex m, const std::complex c) { - return ApproximationEngine::elementWiseOnMatrixComplexAndComplex(m, c, compute); + return ApproximationHelper::ElementWiseOnMatrixComplexAndComplex(m, c, compute); } Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::mapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); + return ApproximationHelper::MapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::mapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); + return ApproximationHelper::MapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); } }; diff --git a/poincare/include/poincare/naperian_logarithm.h b/poincare/include/poincare/naperian_logarithm.h index 6f53dcde3..aaa351164 100644 --- a/poincare/include/poincare/naperian_logarithm.h +++ b/poincare/include/poincare/naperian_logarithm.h @@ -1,9 +1,9 @@ #ifndef POINCARE_NAPERIAN_LOGARITHM_H #define POINCARE_NAPERIAN_LOGARITHM_H -#include +#include #include -#include +#include namespace Poincare { @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "ln"; } /* Simplification */ @@ -25,10 +25,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/nth_root.h b/poincare/include/poincare/nth_root.h index 7e7c4fa11..83ce2dafa 100644 --- a/poincare/include/poincare/nth_root.h +++ b/poincare/include/poincare/nth_root.h @@ -2,7 +2,7 @@ #define POINCARE_NTH_ROOT_H #include -#include +#include namespace Poincare { @@ -14,7 +14,7 @@ private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "root"); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "root"); } /* Simplification */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/opposite.h b/poincare/include/poincare/opposite.h index 91e4c5cb8..993a80fc5 100644 --- a/poincare/include/poincare/opposite.h +++ b/poincare/include/poincare/opposite.h @@ -2,7 +2,7 @@ #define POINCARE_OPPOSITE_H #include -#include +#include namespace Poincare { @@ -26,10 +26,10 @@ public: // Approximation Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, compute); + return ApproximationHelper::Map(this, context, angleUnit, compute); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, compute); + return ApproximationHelper::Map(this, context, angleUnit, compute); } // Layout diff --git a/poincare/include/poincare/parenthesis.h b/poincare/include/poincare/parenthesis.h index d1cdb0918..7863df4d4 100644 --- a/poincare/include/poincare/parenthesis.h +++ b/poincare/include/poincare/parenthesis.h @@ -2,7 +2,7 @@ #define POINCARE_PARENTHESIS_H #include -#include +#include namespace Poincare { @@ -23,9 +23,7 @@ public: // Layout LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; - int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixSerializableRefTextInBuffer(Expression(this), buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, ""); - } + int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; // Simplification Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/permute_coefficient.h b/poincare/include/poincare/permute_coefficient.h index 45e8731fa..023e19c03 100644 --- a/poincare/include/poincare/permute_coefficient.h +++ b/poincare/include/poincare/permute_coefficient.h @@ -1,7 +1,7 @@ #ifndef POINCARE_PERMUTE_COEFFICIENT_H #define POINCARE_PERMUTE_COEFFICIENT_H -#include +#include #include #include @@ -15,10 +15,10 @@ private: constexpr static int k_maxNValue = 100; /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "permute"; } /* Simplification */ diff --git a/poincare/include/poincare/power.h b/poincare/include/poincare/power.h index 664660a18..fa1b42c3c 100644 --- a/poincare/include/poincare/power.h +++ b/poincare/include/poincare/power.h @@ -2,7 +2,7 @@ #define POINCARE_POWER_H #include -#include +#include #include #include #include @@ -33,7 +33,7 @@ private: LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; bool needsParenthesisWithParent(SerializableNode * parentNode) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } static const char * name() { return "^"; } /* Simplify */ @@ -60,10 +60,10 @@ private: template static MatrixComplex computeOnMatrixAndComplex(const MatrixComplex m, const std::complex d); template static MatrixComplex computeOnMatrices(const MatrixComplex m, const MatrixComplex n); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::mapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); + return ApproximationHelper::MapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::mapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); + return ApproximationHelper::MapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); } }; diff --git a/poincare/include/poincare/prediction_interval.h b/poincare/include/poincare/prediction_interval.h index d16411a05..949271c21 100644 --- a/poincare/include/poincare/prediction_interval.h +++ b/poincare/include/poincare/prediction_interval.h @@ -1,7 +1,7 @@ #ifndef POINCARE_PREDICTION_INTERVAL_H #define POINCARE_PREDICTION_INTERVAL_H -#include +#include #include namespace Poincare { @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "prediction95"; } /* Simplification */ diff --git a/poincare/include/poincare/product_layout_node.h b/poincare/include/poincare/product_layout_node.h index bbc0217de..70dd60174 100644 --- a/poincare/include/poincare/product_layout_node.h +++ b/poincare/include/poincare/product_layout_node.h @@ -1,7 +1,7 @@ #ifndef POINCARE_PRODUCT_LAYOUT_NODE_H #define POINCARE_PRODUCT_LAYOUT_NODE_H -#include +#include #include namespace Poincare { diff --git a/poincare/include/poincare/randint.h b/poincare/include/poincare/randint.h index bdcabebf3..93c3fbb95 100644 --- a/poincare/include/poincare/randint.h +++ b/poincare/include/poincare/randint.h @@ -2,7 +2,7 @@ #define POINCARE_RANDINT_H #include -#include +#include namespace Poincare { @@ -13,10 +13,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "randint"; } /* Evaluation */ diff --git a/poincare/include/poincare/random.h b/poincare/include/poincare/random.h index 5706dcd4b..5de890c9d 100644 --- a/poincare/include/poincare/random.h +++ b/poincare/include/poincare/random.h @@ -3,7 +3,7 @@ #include #include -#include +#include namespace Poincare { @@ -17,10 +17,10 @@ private: Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override; /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "random"; } /* Evaluation */ diff --git a/poincare/include/poincare/real_part.h b/poincare/include/poincare/real_part.h index 73be6d331..abe8678f4 100644 --- a/poincare/include/poincare/real_part.h +++ b/poincare/include/poincare/real_part.h @@ -1,9 +1,9 @@ #ifndef POINCARE_REEL_PART_H #define POINCARE_REEL_PART_H -#include +#include #include -#include +#include namespace Poincare { @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "re"; } /* Simplification */ @@ -25,10 +25,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/right_parenthesis_layout_node.h b/poincare/include/poincare/right_parenthesis_layout_node.h index 3fdd7f76e..40884032a 100644 --- a/poincare/include/poincare/right_parenthesis_layout_node.h +++ b/poincare/include/poincare/right_parenthesis_layout_node.h @@ -2,7 +2,7 @@ #define POINCARE_RIGHT_PARENTHESIS_LAYOUT_NODE_H #include -#include +#include namespace Poincare { @@ -18,7 +18,7 @@ public: // SerializableNode int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writeOneCharInBuffer(buffer, bufferSize, ')'); + return SerializationHelper::Char(buffer, bufferSize, ')'); } // TreeNode diff --git a/poincare/include/poincare/right_square_bracket_layout_node.h b/poincare/include/poincare/right_square_bracket_layout_node.h index 01b6072e3..1fd13bc6b 100644 --- a/poincare/include/poincare/right_square_bracket_layout_node.h +++ b/poincare/include/poincare/right_square_bracket_layout_node.h @@ -2,7 +2,7 @@ #define POINCARE_RIGHT_SQUARE_BRACKET_LAYOUT_NODE_H #include -#include +#include namespace Poincare { @@ -10,7 +10,7 @@ class RightSquareBracketLayoutNode : public SquareBracketLayoutNode { public: using SquareBracketLayoutNode::SquareBracketLayoutNode; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writeOneCharInBuffer(buffer, bufferSize, ']'); + return SerializationHelper::Char(buffer, bufferSize, ']'); } bool isRightBracket() const override { return true; } diff --git a/poincare/include/poincare/round.h b/poincare/include/poincare/round.h index d680dbe6a..01ee01259 100644 --- a/poincare/include/poincare/round.h +++ b/poincare/include/poincare/round.h @@ -1,7 +1,7 @@ #ifndef POINCARE_ROUND_H #define POINCARE_ROUND_H -#include +#include #include #include @@ -14,10 +14,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "round"; } /* Simplification */ diff --git a/poincare/include/poincare/sequence.h b/poincare/include/poincare/sequence.h index a5d689237..e64447c51 100644 --- a/poincare/include/poincare/sequence.h +++ b/poincare/include/poincare/sequence.h @@ -1,9 +1,9 @@ #ifndef POINCARE_SEQUENCE_H #define POINCARE_SEQUENCE_H -#include +#include #include -#include +#include namespace Poincare { @@ -12,7 +12,7 @@ class Sequence : public StaticHierarchy<3> { private: LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } virtual LayoutRef createSequenceLayout(LayoutRef subscriptLayout, LayoutRef superscriptLayout, LayoutRef argumentLayout) const = 0; virtual const char * name() const = 0; diff --git a/poincare/include/poincare/serialization_helper.h b/poincare/include/poincare/serialization_helper.h new file mode 100644 index 000000000..af9d0c0d6 --- /dev/null +++ b/poincare/include/poincare/serialization_helper.h @@ -0,0 +1,36 @@ +#ifndef POINCARE_SERIALIZATION_HELPER_H +#define POINCARE_SERIALIZATION_HELPER_H + +#include +#include + +namespace Poincare { + +namespace SerializationHelper { + /* SerializableReference to Text */ + static int Infix( + const SerializableReference serializableRef, + char * buffer, + int bufferSize, + Preferences::PrintFloatMode floatDisplayMode, + int numberOfDigits, + const char * operatorName, + int firstChildIndex = 0, + int lastChildIndex = -1); + + static int Prefix( + const SerializableReference serializableRef, + char * buffer, + int bufferSize, + Preferences::PrintFloatMode floatDisplayMode, + int numberOfDigits, + const char * operatorName, + bool writeFirstChild = true); + + /* Write one char in buffer */ + static int Char(char * buffer, int bufferSize, char charToWrite); +}; + +} + +#endif diff --git a/poincare/include/poincare/simplification_engine.h b/poincare/include/poincare/simplification_engine.h deleted file mode 100644 index 06cef62c2..000000000 --- a/poincare/include/poincare/simplification_engine.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef POINCARE_SIMPLIFICATION_ENGINE_H -#define POINCARE_SIMPLIFICATION_ENGINE_H - -#if MATRIX_EXACT_REDUCING - -#include - -namespace Poincare { - -class SimplificationEngine { -public: - static Expression * map(Expression * e, Context & context, Preferences::AngleUnit angleUnit); - -}; - -} - -#endif - -#endif diff --git a/poincare/include/poincare/simplification_helper.h b/poincare/include/poincare/simplification_helper.h new file mode 100644 index 000000000..7da6ec189 --- /dev/null +++ b/poincare/include/poincare/simplification_helper.h @@ -0,0 +1,18 @@ +#ifndef POINCARE_SIMPLIFICATION_HELPER_H +#define POINCARE_SIMPLIFICATION_HELPER_H + +#if MATRIX_EXACT_REDUCING + +#include + +namespace Poincare { + +namespace SimplificationHelper { + static Expression * Map(Expression * e, Context & context, Preferences::AngleUnit angleUnit); +}; + +} + +#endif + +#endif diff --git a/poincare/include/poincare/sine.h b/poincare/include/poincare/sine.h index fb551d490..a78ea62bd 100644 --- a/poincare/include/poincare/sine.h +++ b/poincare/include/poincare/sine.h @@ -1,9 +1,9 @@ #ifndef POINCARE_SINE_H #define POINCARE_SINE_H -#include +#include #include -#include +#include #include namespace Poincare { @@ -18,20 +18,20 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "sin"; } /* Simplication */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; /* Evaluation */ Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/square_root.h b/poincare/include/poincare/square_root.h index e29d3f1f0..aef5e670a 100644 --- a/poincare/include/poincare/square_root.h +++ b/poincare/include/poincare/square_root.h @@ -1,9 +1,9 @@ #ifndef POINCARE_SQUARE_ROOT_H #define POINCARE_SQUARE_ROOT_H -#include +#include #include -#include +#include namespace Poincare { @@ -20,10 +20,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/include/poincare/store.h b/poincare/include/poincare/store.h index 96c4b4fe9..6bcc4f380 100644 --- a/poincare/include/poincare/store.h +++ b/poincare/include/poincare/store.h @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include namespace Poincare { diff --git a/poincare/include/poincare/subtraction.h b/poincare/include/poincare/subtraction.h index 3dc672725..b6655d413 100644 --- a/poincare/include/poincare/subtraction.h +++ b/poincare/include/poincare/subtraction.h @@ -2,8 +2,8 @@ #define POINCARE_SUBSTRACTION_H #include -#include -#include +#include +#include namespace Poincare { @@ -17,28 +17,28 @@ private: /* Layout */ bool needsParenthesisWithParent(SerializableNode * parentNode) const override; LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createInfixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Infix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } static const char * name() { return "-"; } /* Simplification */ Expression shallowReduce(Context& context, Preferences::AngleUnit angleUnit) override; /* Evaluation */ template static MatrixComplex computeOnMatrixAndComplex(const MatrixComplex m, const std::complex c) { - return ApproximationEngine::elementWiseOnMatrixComplexAndComplex(m, c, compute); + return ApproximationHelper::ElementWiseOnMatrixComplexAndComplex(m, c, compute); } template static MatrixComplex computeOnComplexAndMatrix(const std::complex c, const MatrixComplex n); template static MatrixComplex computeOnMatrices(const MatrixComplex m, const MatrixComplex n) { - return ApproximationEngine::elementWiseOnComplexMatrices(m, n, compute); + return ApproximationHelper::ElementWiseOnComplexMatrices(m, n, compute); } Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::mapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); + return ApproximationHelper::MapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::mapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); + return ApproximationHelper::MapReduce(this, context, angleUnit, compute, computeOnComplexAndMatrix, computeOnMatrixAndComplex, computeOnMatrices); } }; diff --git a/poincare/include/poincare/sum_layout_node.h b/poincare/include/poincare/sum_layout_node.h index 0119fa5df..195f67458 100644 --- a/poincare/include/poincare/sum_layout_node.h +++ b/poincare/include/poincare/sum_layout_node.h @@ -1,7 +1,7 @@ #ifndef POINCARE_SUM_LAYOUT_NODE_H #define POINCARE_SUM_LAYOUT_NODE_H -#include +#include #include namespace Poincare { diff --git a/poincare/include/poincare/tangent.h b/poincare/include/poincare/tangent.h index 374905ba4..698e74b5e 100644 --- a/poincare/include/poincare/tangent.h +++ b/poincare/include/poincare/tangent.h @@ -1,9 +1,9 @@ #ifndef POINCARE_TANGENT_H #define POINCARE_TANGENT_H -#include +#include #include -#include +#include #include namespace Poincare { @@ -16,10 +16,10 @@ public: private: /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, name()); } const char * name() const { return "tan"; } /* Simplication */ @@ -27,10 +27,10 @@ private: /* Evaluation */ template static std::complex computeOnComplex(const std::complex c, Preferences::AngleUnit angleUnit = Preferences::AngleUnit::Radian); Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit,computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit,computeOnComplex); } Evaluation approximate(DoublePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } }; diff --git a/poincare/src/absolute_value.cpp b/poincare/src/absolute_value.cpp index ce587722a..38a9e7032 100644 --- a/poincare/src/absolute_value.cpp +++ b/poincare/src/absolute_value.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include extern "C" { @@ -35,7 +35,7 @@ Expression AbsoluteValue::shallowReduce(Context& context, Preferences::AngleUnit Expression * op = editableOperand(0); #if MATRIX_EXACT_REDUCING if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif if (op->sign() == Sign::Positive) { diff --git a/poincare/src/approximation_engine.cpp b/poincare/src/approximation_helper.cpp similarity index 78% rename from poincare/src/approximation_engine.cpp rename to poincare/src/approximation_helper.cpp index 1473f0f2d..fa626f894 100644 --- a/poincare/src/approximation_engine.cpp +++ b/poincare/src/approximation_helper.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include @@ -13,7 +13,7 @@ template T absMod(T a, T b) { return result > b/2 ? b-result : result; } -template std::complex ApproximationEngine::truncateRealOrImaginaryPartAccordingToArgument(std::complex c) { +template std::complex ApproximationHelper::TruncateRealOrImaginaryPartAccordingToArgument(std::complex c) { T arg = std::arg(c); T precision = 10*Expression::epsilon(); if (absMod(arg, (T)M_PI) <= precision) { @@ -25,7 +25,7 @@ template std::complex ApproximationEngine::truncateRealOrImagina return c; } -template Evaluation ApproximationEngine::map(const ExpressionNode * expression, Context& context, Preferences::AngleUnit angleUnit, ComplexCompute compute) { +template Evaluation ApproximationHelper::Map(const ExpressionNode * expression, Context& context, Preferences::AngleUnit angleUnit, ComplexCompute compute) { assert(expression->numberOfChildren() == 1); Evaluation input = expression->childAtIndex(0)->approximate(T(), context, angleUnit); if (input.node()->type() == EvaluationNode::Type::AllocationFailure) { @@ -50,7 +50,7 @@ template Evaluation ApproximationEngine::map(const ExpressionNode } } -template Evaluation ApproximationEngine::mapReduce(const ExpressionNode * expression, Context& context, Preferences::AngleUnit angleUnit, ComplexAndComplexReduction computeOnComplexes, ComplexAndMatrixReduction computeOnComplexAndMatrix, MatrixAndComplexReduction computeOnMatrixAndComplex, MatrixAndMatrixReduction computeOnMatrices) { +template Evaluation ApproximationHelper::MapReduce(const ExpressionNode * expression, Context& context, Preferences::AngleUnit angleUnit, ComplexAndComplexReduction computeOnComplexes, ComplexAndMatrixReduction computeOnComplexAndMatrix, MatrixAndComplexReduction computeOnMatrixAndComplex, MatrixAndMatrixReduction computeOnMatrices) { Evaluation result = expression->childAtIndex(0)->approximate(T(), context, angleUnit); for (int i = 1; i < expression->numberOfChildren(); i++) { Evaluation intermediateResult(nullptr); @@ -87,7 +87,7 @@ template Evaluation ApproximationEngine::mapReduce(const Expressi return result; } -template MatrixComplex ApproximationEngine::elementWiseOnMatrixComplexAndComplex(const MatrixComplex m, const std::complex c, ComplexAndComplexReduction computeOnComplexes) { +template MatrixComplex ApproximationHelper::ElementWiseOnMatrixComplexAndComplex(const MatrixComplex m, const std::complex c, ComplexAndComplexReduction computeOnComplexes) { if (m.isAllocationFailure()) { return MatrixComplex(EvaluationNode::FailedAllocationStaticNode()); } @@ -104,7 +104,7 @@ template MatrixComplex ApproximationEngine::elementWiseOnMatrixCo return matrix; } -template MatrixComplex ApproximationEngine::elementWiseOnComplexMatrices(const MatrixComplex m, const MatrixComplex n, ComplexAndComplexReduction computeOnComplexes) { +template MatrixComplex ApproximationHelper::ElementWiseOnComplexMatrices(const MatrixComplex m, const MatrixComplex n, ComplexAndComplexReduction computeOnComplexes) { if (m.isAllocationFailure() || n.isAllocationFailure()) { return MatrixComplex(EvaluationNode::FailedAllocationStaticNode()); } @@ -125,16 +125,16 @@ template MatrixComplex ApproximationEngine::elementWiseOnComplexM return matrix; } -template std::complex Poincare::ApproximationEngine::truncateRealOrImaginaryPartAccordingToArgument(std::complex); -template std::complex Poincare::ApproximationEngine::truncateRealOrImaginaryPartAccordingToArgument(std::complex); -template Poincare::Evaluation Poincare::ApproximationEngine::map(const Poincare::ExpressionNode * expression, Poincare::Context& context, Poincare::Preferences::AngleUnit angleUnit, Poincare::ApproximationEngine::ComplexCompute compute); -template Poincare::Evaluation Poincare::ApproximationEngine::map(const Poincare::ExpressionNode * expression, Poincare::Context& context, Poincare::Preferences::AngleUnit angleUnit, Poincare::ApproximationEngine::ComplexCompute compute); -template Poincare::Evaluation Poincare::ApproximationEngine::mapReduce(const Poincare::ExpressionNode * expression, Poincare::Context& context, Poincare::Preferences::AngleUnit angleUnit, Poincare::ApproximationEngine::ComplexAndComplexReduction computeOnComplexes, Poincare::ApproximationEngine::ComplexAndMatrixReduction computeOnComplexAndMatrix, Poincare::ApproximationEngine::MatrixAndComplexReduction computeOnMatrixAndComplex, Poincare::ApproximationEngine::MatrixAndMatrixReduction computeOnMatrices); -template Poincare::Evaluation Poincare::ApproximationEngine::mapReduce(const Poincare::ExpressionNode * expression, Poincare::Context& context, Poincare::Preferences::AngleUnit angleUnit, Poincare::ApproximationEngine::ComplexAndComplexReduction computeOnComplexes, Poincare::ApproximationEngine::ComplexAndMatrixReduction computeOnComplexAndMatrix, Poincare::ApproximationEngine::MatrixAndComplexReduction computeOnMatrixAndComplex, Poincare::ApproximationEngine::MatrixAndMatrixReduction computeOnMatrices); -template Poincare::MatrixComplex Poincare::ApproximationEngine::elementWiseOnMatrixComplexAndComplex(const Poincare::MatrixComplex, const std::complex, Poincare::Complex (*)(std::complex, std::complex)); -template Poincare::MatrixComplex Poincare::ApproximationEngine::elementWiseOnMatrixComplexAndComplex(const Poincare::MatrixComplex, std::complex const, Poincare::Complex (*)(std::complex, std::complex)); -template Poincare::MatrixComplex Poincare::ApproximationEngine::elementWiseOnComplexMatrices(const Poincare::MatrixComplex, const Poincare::MatrixComplex, Poincare::Complex (*)(std::complex, std::complex)); -template Poincare::MatrixComplex Poincare::ApproximationEngine::elementWiseOnComplexMatrices(const Poincare::MatrixComplex, const Poincare::MatrixComplex, Poincare::Complex (*)(std::complex, std::complex)); +template std::complex Poincare::ApproximationHelper::TruncateRealOrImaginaryPartAccordingToArgument(std::complex); +template std::complex Poincare::ApproximationHelper::TruncateRealOrImaginaryPartAccordingToArgument(std::complex); +template Poincare::Evaluation Poincare::ApproximationHelper::Map(const Poincare::ExpressionNode * expression, Poincare::Context& context, Poincare::Preferences::AngleUnit angleUnit, Poincare::ApproximationHelper::ComplexCompute compute); +template Poincare::Evaluation Poincare::ApproximationHelper::Map(const Poincare::ExpressionNode * expression, Poincare::Context& context, Poincare::Preferences::AngleUnit angleUnit, Poincare::ApproximationHelper::ComplexCompute compute); +template Poincare::Evaluation Poincare::ApproximationHelper::MapReduce(const Poincare::ExpressionNode * expression, Poincare::Context& context, Poincare::Preferences::AngleUnit angleUnit, Poincare::ApproximationHelper::ComplexAndComplexReduction computeOnComplexes, Poincare::ApproximationHelper::ComplexAndMatrixReduction computeOnComplexAndMatrix, Poincare::ApproximationHelper::MatrixAndComplexReduction computeOnMatrixAndComplex, Poincare::ApproximationHelper::MatrixAndMatrixReduction computeOnMatrices); +template Poincare::Evaluation Poincare::ApproximationHelper::MapReduce(const Poincare::ExpressionNode * expression, Poincare::Context& context, Poincare::Preferences::AngleUnit angleUnit, Poincare::ApproximationHelper::ComplexAndComplexReduction computeOnComplexes, Poincare::ApproximationHelper::ComplexAndMatrixReduction computeOnComplexAndMatrix, Poincare::ApproximationHelper::MatrixAndComplexReduction computeOnMatrixAndComplex, Poincare::ApproximationHelper::MatrixAndMatrixReduction computeOnMatrices); +template Poincare::MatrixComplex Poincare::ApproximationHelper::ElementWiseOnMatrixComplexAndComplex(const Poincare::MatrixComplex, const std::complex, Poincare::Complex (*)(std::complex, std::complex)); +template Poincare::MatrixComplex Poincare::ApproximationHelper::ElementWiseOnMatrixComplexAndComplex(const Poincare::MatrixComplex, std::complex const, Poincare::Complex (*)(std::complex, std::complex)); +template Poincare::MatrixComplex Poincare::ApproximationHelper::ElementWiseOnComplexMatrices(const Poincare::MatrixComplex, const Poincare::MatrixComplex, Poincare::Complex (*)(std::complex, std::complex)); +template Poincare::MatrixComplex Poincare::ApproximationHelper::ElementWiseOnComplexMatrices(const Poincare::MatrixComplex, const Poincare::MatrixComplex, Poincare::Complex (*)(std::complex, std::complex)); } diff --git a/poincare/src/arc_cosine.cpp b/poincare/src/arc_cosine.cpp index 498305ba7..7ec34e990 100644 --- a/poincare/src/arc_cosine.cpp +++ b/poincare/src/arc_cosine.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include extern "C" { #include } @@ -24,7 +24,7 @@ Expression ArcCosine::shallowReduce(Context& context, Preferences::AngleUnit ang } #if MATRIX_EXACT_REDUCING if (operand(0)->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return Trigonometry::shallowReduceInverseFunction(this, context, angleUnit); diff --git a/poincare/src/arc_sine.cpp b/poincare/src/arc_sine.cpp index 886140c27..94f7ac38c 100644 --- a/poincare/src/arc_sine.cpp +++ b/poincare/src/arc_sine.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include extern "C" { #include } @@ -24,7 +24,7 @@ Expression ArcSine::shallowReduce(Context& context, Preferences::AngleUnit angle } #if MATRIX_EXACT_REDUCING if (operand(0)->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return Trigonometry::shallowReduceInverseFunction(this, context, angleUnit); diff --git a/poincare/src/arc_tangent.cpp b/poincare/src/arc_tangent.cpp index c338b34f0..67d24e7f0 100644 --- a/poincare/src/arc_tangent.cpp +++ b/poincare/src/arc_tangent.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include extern "C" { #include } @@ -24,7 +24,7 @@ Expression ArcTangent::shallowReduce(Context& context, Preferences::AngleUnit an } #if MATRIX_EXACT_REDUCING if (operand(0)->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return Trigonometry::shallowReduceInverseFunction(this, context, angleUnit); diff --git a/poincare/src/binomial_coefficient_layout_node.cpp b/poincare/src/binomial_coefficient_layout_node.cpp index a15330ef2..6ebeabce0 100644 --- a/poincare/src/binomial_coefficient_layout_node.cpp +++ b/poincare/src/binomial_coefficient_layout_node.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include namespace Poincare { @@ -75,7 +75,7 @@ void BinomialCoefficientLayoutNode::moveCursorDown(LayoutCursor * cursor, bool * } int BinomialCoefficientLayoutNode::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { - return LayoutEngine::writePrefixSerializableRefTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "binomial"); + return SerializationHelper::Prefix(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "binomial"); } KDSize BinomialCoefficientLayoutNode::computeSize() { diff --git a/poincare/src/bracket_pair_layout_node.cpp b/poincare/src/bracket_pair_layout_node.cpp index 577d1d9ce..e062695fd 100644 --- a/poincare/src/bracket_pair_layout_node.cpp +++ b/poincare/src/bracket_pair_layout_node.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include extern "C" { #include #include diff --git a/poincare/src/ceiling.cpp b/poincare/src/ceiling.cpp index 68247aa88..bbd55f886 100644 --- a/poincare/src/ceiling.cpp +++ b/poincare/src/ceiling.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include extern "C" { #include @@ -28,7 +28,7 @@ Expression Ceiling::shallowReduce(Context& context, Preferences::AngleUnit angle Expression * op = editableOperand(0); #if MATRIX_EXACT_REDUCING if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif if (op->type() == Type::Symbol) { diff --git a/poincare/src/char_layout_node.cpp b/poincare/src/char_layout_node.cpp index 7eac52ad5..744610535 100644 --- a/poincare/src/char_layout_node.cpp +++ b/poincare/src/char_layout_node.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include namespace Poincare { @@ -28,7 +28,7 @@ void CharLayoutNode::moveCursorRight(LayoutCursor * cursor, bool * shouldRecompu } int CharLayoutNode::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { - return LayoutEngine::writeOneCharInBuffer(buffer, bufferSize, m_char); + return SerializationHelper::Char(buffer, bufferSize, m_char); } bool CharLayoutNode::isCollapsable(int * numberOfOpenParenthesis, bool goingLeft) const { diff --git a/poincare/src/complex_argument.cpp b/poincare/src/complex_argument.cpp index a376ac1fd..993b177ef 100644 --- a/poincare/src/complex_argument.cpp +++ b/poincare/src/complex_argument.cpp @@ -1,5 +1,5 @@ #include -#include +#include extern "C" { #include } @@ -24,7 +24,7 @@ Expression ComplexArgument::shallowReduce(Context& context, Preferences::AngleUn #if MATRIX_EXACT_REDUCING Expression * op = editableOperand(0); if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return this; diff --git a/poincare/src/conjugate.cpp b/poincare/src/conjugate.cpp index 840feb724..acba79c88 100644 --- a/poincare/src/conjugate.cpp +++ b/poincare/src/conjugate.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include #include @@ -27,7 +27,7 @@ Expression Conjugate::shallowReduce(Context& context, Preferences::AngleUnit ang Expression * op = editableOperand(0); #if MATRIX_EXACT_REDUCING if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif if (op->type() == Type::Rational) { diff --git a/poincare/src/conjugate_layout_node.cpp b/poincare/src/conjugate_layout_node.cpp index fd1cb9ea3..f781f344d 100644 --- a/poincare/src/conjugate_layout_node.cpp +++ b/poincare/src/conjugate_layout_node.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include @@ -54,7 +54,7 @@ void ConjugateLayoutNode::moveCursorRight(LayoutCursor * cursor, bool * shouldRe } int ConjugateLayoutNode::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { - return LayoutEngine::writePrefixSerializableRefTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "conj"); + return SerializationHelper::Prefix(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "conj"); } KDSize ConjugateLayoutNode::computeSize() { diff --git a/poincare/src/cosine.cpp b/poincare/src/cosine.cpp index 05343bb1b..97c360814 100644 --- a/poincare/src/cosine.cpp +++ b/poincare/src/cosine.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include extern "C" { #include @@ -40,7 +40,7 @@ Expression Cosine::shallowReduce(Context& context, Preferences::AngleUnit angleU #if MATRIX_EXACT_REDUCING Expression * op = editableOperand(0); if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return Trigonometry::shallowReduceDirectFunction(this, context, angleUnit); diff --git a/poincare/src/decimal.cpp b/poincare/src/decimal.cpp index 67a552461..4f4f0f269 100644 --- a/poincare/src/decimal.cpp +++ b/poincare/src/decimal.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include #include #include @@ -107,7 +107,7 @@ bool DecimalNode::needsParenthesisWithParent(SerializableNode * parentNode) cons LayoutRef DecimalNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { char buffer[k_maxBufferSize]; int numberOfChars = convertToText(buffer, k_maxBufferSize, floatDisplayMode, numberOfSignificantDigits); - return LayoutEngine::createStringLayout(buffer, numberOfChars); + return LayoutHelper::String(buffer, numberOfChars); } int DecimalNode::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { diff --git a/poincare/src/derivative.cpp b/poincare/src/derivative.cpp index f4d0cae92..6fc71f520 100644 --- a/poincare/src/derivative.cpp +++ b/poincare/src/derivative.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include extern "C" { @@ -85,7 +85,7 @@ template T Derivative::riddersApproximation(Context & context, Preferences::AngleUnit angleUnit, T x, T h, T * error) const { /* Ridders' Algorithm * Blibliography: - * - Ridders, C.J.F. 1982, Advances in Engineering Software, vol. 4, no. 2, + * - Ridders, C.J.F. 1982, Advances in Helperering Software, vol. 4, no. 2, * pp. 75–76. */ *error = sizeof(T) == sizeof(float) ? FLT_MAX : DBL_MAX; diff --git a/poincare/src/empty_expression.cpp b/poincare/src/empty_expression.cpp index 5c9fd4b80..ba842bde7 100644 --- a/poincare/src/empty_expression.cpp +++ b/poincare/src/empty_expression.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include @@ -11,7 +11,7 @@ Expression * EmptyExpression::clone() const { } int EmptyExpression::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { - return LayoutEngine::writeOneCharInBuffer(buffer, bufferSize, Ion::Charset::Empty); + return SerializationHelper::Char(buffer, bufferSize, Ion::Charset::Empty); } LayoutRef EmptyExpression::createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { diff --git a/poincare/src/expression_node.cpp b/poincare/src/expression_node.cpp index 490374f96..e964587ac 100644 --- a/poincare/src/expression_node.cpp +++ b/poincare/src/expression_node.cpp @@ -99,8 +99,8 @@ Expression ExpressionNode::reduce(Context & context, Preferences::AngleUnit angl return Expression(this); } -Expression ExpressionNode::beautify(Context & context, Preferences::AngleUnit angleUnit) const { - return Expression(this); +Expression Expression::beautify(Context & context, Preferences::AngleUnit angleUnit) const { + return *this; } bool ExpressionNode::isOfType(Type * types, int length) const { diff --git a/poincare/src/factorial.cpp b/poincare/src/factorial.cpp index 240a1101d..f3659a774 100644 --- a/poincare/src/factorial.cpp +++ b/poincare/src/factorial.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include #include extern "C" { @@ -43,7 +43,7 @@ Expression Factorial::shallowReduce(Context& context, Preferences::AngleUnit ang } #if MATRIX_EXACT_REDUCING if (operand(0)->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif if (operand(0)->type() == Type::Rational) { diff --git a/poincare/src/floor.cpp b/poincare/src/floor.cpp index e0cd5592a..528bd7fd6 100644 --- a/poincare/src/floor.cpp +++ b/poincare/src/floor.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include extern "C" { @@ -28,7 +28,7 @@ Expression Floor::shallowReduce(Context& context, Preferences::AngleUnit angleUn Expression * op = editableOperand(0); #if MATRIX_EXACT_REDUCING if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif if (op->type() == Type::Symbol) { diff --git a/poincare/src/frac_part.cpp b/poincare/src/frac_part.cpp index 3a2bbc7e3..b83147314 100644 --- a/poincare/src/frac_part.cpp +++ b/poincare/src/frac_part.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include extern "C" { #include @@ -25,7 +25,7 @@ Expression FracPart::shallowReduce(Context& context, Preferences::AngleUnit angl Expression * op = editableOperand(0); #if MATRIX_EXACT_REDUCING if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif if (op->type() != Type::Rational) { diff --git a/poincare/src/fraction_layout_node.cpp b/poincare/src/fraction_layout_node.cpp index f1d5d0614..adaba8284 100644 --- a/poincare/src/fraction_layout_node.cpp +++ b/poincare/src/fraction_layout_node.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include #include @@ -153,7 +153,7 @@ int FractionLayoutNode::writeTextInBuffer(char * buffer, int bufferSize, Prefere } // Write the content of the fraction - numberOfChar += LayoutEngine::writeInfixSerializableRefTextInBuffer(this, buffer+numberOfChar, bufferSize-numberOfChar, floatDisplayMode, numberOfSignificantDigits, "/"); + numberOfChar += SerializationHelper::Infix(this, buffer+numberOfChar, bufferSize-numberOfChar, floatDisplayMode, numberOfSignificantDigits, "/"); if (numberOfChar >= bufferSize-1) { return bufferSize-1; } if (addParenthesis) { diff --git a/poincare/src/grid_layout_node.cpp b/poincare/src/grid_layout_node.cpp index db782e4d8..369dd2ec8 100644 --- a/poincare/src/grid_layout_node.cpp +++ b/poincare/src/grid_layout_node.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include namespace Poincare { diff --git a/poincare/src/horizontal_layout_node.cpp b/poincare/src/horizontal_layout_node.cpp index 654967838..129406317 100644 --- a/poincare/src/horizontal_layout_node.cpp +++ b/poincare/src/horizontal_layout_node.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include namespace Poincare { @@ -172,7 +172,7 @@ int HorizontalLayoutNode::writeTextInBuffer(char * buffer, int bufferSize, Prefe buffer[0] = 0; return 0; } - return LayoutEngine::writeInfixSerializableRefTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, ""); + return SerializationHelper::Infix(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, ""); } // Protected diff --git a/poincare/src/hyperbolic_arc_cosine.cpp b/poincare/src/hyperbolic_arc_cosine.cpp index 3c5186882..690456539 100644 --- a/poincare/src/hyperbolic_arc_cosine.cpp +++ b/poincare/src/hyperbolic_arc_cosine.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include extern "C" { #include @@ -25,7 +25,7 @@ Expression HyperbolicArcCosine::shallowReduce(Context& context, Preferences::Ang #if MATRIX_EXACT_REDUCING Expression * op = editableOperand(0); if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return this; diff --git a/poincare/src/hyperbolic_arc_sine.cpp b/poincare/src/hyperbolic_arc_sine.cpp index 7cae95c63..84f7e2986 100644 --- a/poincare/src/hyperbolic_arc_sine.cpp +++ b/poincare/src/hyperbolic_arc_sine.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include extern "C" { #include @@ -25,7 +25,7 @@ Expression HyperbolicArcSine::shallowReduce(Context& context, Preferences::Angle #if MATRIX_EXACT_REDUCING Expression * op = editableOperand(0); if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return this; diff --git a/poincare/src/hyperbolic_arc_tangent.cpp b/poincare/src/hyperbolic_arc_tangent.cpp index 48e48e168..e341a4b9a 100644 --- a/poincare/src/hyperbolic_arc_tangent.cpp +++ b/poincare/src/hyperbolic_arc_tangent.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include extern "C" { #include @@ -25,7 +25,7 @@ Expression HyperbolicArcTangent::shallowReduce(Context& context, Preferences::An #if MATRIX_EXACT_REDUCING Expression * op = editableOperand(0); if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return this; diff --git a/poincare/src/hyperbolic_cosine.cpp b/poincare/src/hyperbolic_cosine.cpp index 3719a4f09..82b16c6b6 100644 --- a/poincare/src/hyperbolic_cosine.cpp +++ b/poincare/src/hyperbolic_cosine.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include extern "C" { #include @@ -29,7 +29,7 @@ Expression HyperbolicCosine::shallowReduce(Context& context, Preferences::AngleU #if MATRIX_EXACT_REDUCING Expression * op = editableOperand(0); if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return this; diff --git a/poincare/src/hyperbolic_sine.cpp b/poincare/src/hyperbolic_sine.cpp index 7eab2b5ad..d245f3f59 100644 --- a/poincare/src/hyperbolic_sine.cpp +++ b/poincare/src/hyperbolic_sine.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include extern "C" { #include @@ -29,7 +29,7 @@ Expression HyperbolicSine::shallowReduce(Context& context, Preferences::AngleUni #if MATRIX_EXACT_REDUCING Expression * op = editableOperand(0); if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return this; diff --git a/poincare/src/hyperbolic_tangent.cpp b/poincare/src/hyperbolic_tangent.cpp index 49651ce5b..de6cadbee 100644 --- a/poincare/src/hyperbolic_tangent.cpp +++ b/poincare/src/hyperbolic_tangent.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include extern "C" { #include @@ -28,7 +28,7 @@ Expression HyperbolicTangent::shallowReduce(Context& context, Preferences::Angle #if MATRIX_EXACT_REDUCING Expression * op = editableOperand(0); if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return this; diff --git a/poincare/src/imaginary_part.cpp b/poincare/src/imaginary_part.cpp index ea68ccc26..4ba60d83b 100644 --- a/poincare/src/imaginary_part.cpp +++ b/poincare/src/imaginary_part.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include extern "C" { @@ -26,7 +26,7 @@ Expression ImaginaryPart::shallowReduce(Context& context, Preferences::AngleUnit Expression * op = editableOperand(0); #if MATRIX_EXACT_REDUCING if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif if (op->type() == Type::Rational) { diff --git a/poincare/src/infinity.cpp b/poincare/src/infinity.cpp index bac658395..429a169b7 100644 --- a/poincare/src/infinity.cpp +++ b/poincare/src/infinity.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include extern "C" { #include @@ -18,7 +18,7 @@ InfinityNode * InfinityNode::FailedAllocationStaticNode() { LayoutRef InfinityNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { char buffer[5]; int numberOfChars = writeTextInBuffer(buffer, 5, floatDisplayMode, numberOfSignificantDigits); - return LayoutEngine::createStringLayout(buffer, numberOfChars); + return LayoutHelper::String(buffer, numberOfChars); } int InfinityNode::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { diff --git a/poincare/src/integer.cpp b/poincare/src/integer.cpp index 95f468ce4..f25eebd3a 100644 --- a/poincare/src/integer.cpp +++ b/poincare/src/integer.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include #include @@ -82,7 +82,7 @@ int NaturalIntegerAbstract::writeTextInBuffer(char * buffer, int bufferSize) con LayoutRef NaturalIntegerAbstract::createLayout() const { char buffer[k_maxNumberOfDigitsBase10]; int numberOfChars = writeTextInBuffer(buffer, k_maxNumberOfDigitsBase10); - return LayoutEngine::createStringLayout(buffer, numberOfChars); + return LayoutHelper::String(buffer, numberOfChars); } // Approximation @@ -452,7 +452,7 @@ Expression IntegerNode::setSign(Sign s, Context & context, Preferences::AngleUni } void IntegerNode::setNegative(bool negative) { - if (isZero()) { // Zero cannot be negative + if (numberOfDigits() > 0) { // Zero cannot be negative return; } m_negative = negative; diff --git a/poincare/src/layout_helper.cpp b/poincare/src/layout_helper.cpp new file mode 100644 index 000000000..b958b4126 --- /dev/null +++ b/poincare/src/layout_helper.cpp @@ -0,0 +1,73 @@ +#include +#include +#include +#include +#include +#include +#include + +namespace Poincare { + +LayoutRef LayoutHelper::Infix(const Expression * expression, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName) { + int numberOfChildren = expression->numberOfChildren(); + assert(numberOfChildren > 1); + HorizontalLayoutRef result; + result.addOrMergeChildAtIndex(expression->operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), 0, 0); + for (int i = 1; i < numberOfChildren; i++) { + result.addOrMergeChildAtIndex(String(operatorName, strlen(operatorName)), result.numberOfChildren(), true); + result.addOrMergeChildAtIndex( + expression->operand(i)->createLayout(floatDisplayMode, numberOfSignificantDigits), + result.numberOfChildren(), + true); + } + return result; +} + +LayoutRef LayoutHelper::Prefix(const Expression * expression, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName) { + HorizontalLayoutRef result; + // Add the operator name. + result.addOrMergeChildAtIndex(String(operatorName, strlen(operatorName)), 0, true); + + // Create the layout of arguments separated by commas. + HorizontalLayoutRef args; + int numberOfChildren = expression->numberOfChildren(); + if (numberOfChildren > 0) { + args.addOrMergeChildAtIndex(expression->operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), 0, true); + for (int i = 1; i < numberOfChildren; i++) { + args.addChildAtIndex(CharLayoutRef(','), args.numberOfChildren(), args.numberOfChildren(), nullptr); + args.addOrMergeChildAtIndex(expression->operand(i)->createLayout(floatDisplayMode, numberOfSignificantDigits), args.numberOfChildren(), true); + } + } + // Add the parenthesed arguments. + result.addOrMergeChildAtIndex(Parentheses(args, false), result.numberOfChildren(), true); + return result; +} + +LayoutRef LayoutHelper::Parentheses(LayoutRef layoutRef, bool cloneLayout) { + HorizontalLayoutRef result; + result.addChildAtIndex(LeftParenthesisLayoutRef(), 0, 0); + if (layoutRef.isDefined()) { + result.addOrMergeChildAtIndex(cloneLayout ? layoutRef.clone() : layoutRef, 1, true); + } + result.addChildAtIndex(RightParenthesisLayoutRef(), result.numberOfChildren(), result.numberOfChildren()); + return result; +} + +HorizontalLayoutRef LayoutHelper::String(const char * buffer, int bufferSize, KDText::FontSize fontSize) { + assert(bufferSize > 0); + HorizontalLayoutRef resultLayout; + for (int i = 0; i < bufferSize; i++) { + resultLayout.addChildAtIndex(CharLayoutRef(buffer[i], fontSize), i, i, nullptr); + } + return resultLayout; +} + +LayoutRef LayoutHelper::Logarithm(LayoutRef argument, LayoutRef index) { + HorizontalLayoutRef resultLayout = String("log", 3); + VerticalOffsetLayoutRef offsetLayout = VerticalOffsetLayoutRef(index, VerticalOffsetLayoutNode::Type::Subscript); + resultLayout.addChildAtIndex(offsetLayout, resultLayout.numberOfChildren(), resultLayout.numberOfChildren(), nullptr); + resultLayout.addOrMergeChildAtIndex(Parentheses(argument, false), resultLayout.numberOfChildren(), true); + return resultLayout; +} + +} diff --git a/poincare/src/logarithm.cpp b/poincare/src/logarithm.cpp index eaf09e7f5..6b901c7e9 100644 --- a/poincare/src/logarithm.cpp +++ b/poincare/src/logarithm.cpp @@ -1,13 +1,13 @@ #include #include -#include +#include #include #include #include #include #include #include -#include +#include #include #include #include @@ -67,7 +67,7 @@ Expression Logarithm::shallowReduce(Context& context, Preferences::AngleUnit ang Expression * op = editableOperand(0); #if MATRIX_EXACT_REDUCING if (numberOfChildren() == 1 && op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } if (numberOfChildren() == 2 && (op->type() == Type::Matrix || operand(1)->type() == Type::Matrix)) { return replaceWith(new Undefined(), true); @@ -211,7 +211,7 @@ Expression * Logarithm::shallowBeautify(Context & context, Preferences::AngleUni template Evaluation Logarithm::templatedApproximate(Context& context, Preferences::AngleUnit angleUnit) const { if (numberOfChildren() == 1) { - return ApproximationEngine::map(this, context, angleUnit, computeOnComplex); + return ApproximationHelper::Map(this, context, angleUnit, computeOnComplex); } Evaluation * x = operand(0)->privateApproximate(T(), context, angleUnit); Evaluation * n = operand(1)->privateApproximate(T(), context, angleUnit); @@ -228,9 +228,9 @@ Evaluation Logarithm::templatedApproximate(Context& context, Preferences::Ang LayoutRef Logarithm::createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { if (numberOfChildren() == 1) { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, "log"); + return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, "log"); } - return LayoutEngine::createLogLayout(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), operand(1)->createLayout(floatDisplayMode, numberOfSignificantDigits)); + return LayoutHelper::Logarithm(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), operand(1)->createLayout(floatDisplayMode, numberOfSignificantDigits)); } } diff --git a/poincare/src/matrix_layout_node.cpp b/poincare/src/matrix_layout_node.cpp index e5de9166d..5a999df34 100644 --- a/poincare/src/matrix_layout_node.cpp +++ b/poincare/src/matrix_layout_node.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include namespace Poincare { @@ -126,7 +126,7 @@ int MatrixLayoutNode::writeTextInBuffer(char * buffer, int bufferSize, Preferenc buffer[numberOfChar++] = '['; if (numberOfChar >= bufferSize-1) { return bufferSize-1;} - numberOfChar += LayoutEngine::writeInfixSerializableRefTextInBuffer(SerializableRef(this), buffer+numberOfChar, bufferSize-numberOfChar, floatDisplayMode, numberOfSignificantDigits, ",", i*m_numberOfColumns, i* m_numberOfColumns + maxColumnIndex); + numberOfChar += SerializationHelper::Infix(SerializableRef(this), buffer+numberOfChar, bufferSize-numberOfChar, floatDisplayMode, numberOfSignificantDigits, ",", i*m_numberOfColumns, i* m_numberOfColumns + maxColumnIndex); if (numberOfChar >= bufferSize-1) { return bufferSize-1; } buffer[numberOfChar++] = ']'; diff --git a/poincare/src/multiplication.cpp b/poincare/src/multiplication.cpp index 125258bf6..feac0302c 100644 --- a/poincare/src/multiplication.cpp +++ b/poincare/src/multiplication.cpp @@ -87,12 +87,12 @@ bool Multiplication::needParenthesisWithParent(const Expression * e) const { LayoutRef Multiplication::createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { const char middleDotString[] = {Ion::Charset::MiddleDot, 0}; - return LayoutEngine::createInfixLayout(this, floatDisplayMode, numberOfSignificantDigits, middleDotString); + return LayoutHelper::Infix(this, floatDisplayMode, numberOfSignificantDigits, middleDotString); } int Multiplication::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { const char multiplicationString[] = {Ion::Charset::MultiplicationSign, 0}; - return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, multiplicationString); + return LayoutHelper::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, multiplicationString); } Expression::Sign Multiplication::sign() const { diff --git a/poincare/src/naperian_logarithm.cpp b/poincare/src/naperian_logarithm.cpp index 391b5ce92..2d8d58c89 100644 --- a/poincare/src/naperian_logarithm.cpp +++ b/poincare/src/naperian_logarithm.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include extern "C" { #include #include @@ -27,7 +27,7 @@ Expression NaperianLogarithm::shallowReduce(Context& context, Preferences::Angle } #if MATRIX_EXACT_REDUCING if (operand(0)->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif const Expression * logOperands[2] = {operand(0)->clone(), new Symbol(Ion::Charset::Exponential)}; diff --git a/poincare/src/nth_root_layout_node.cpp b/poincare/src/nth_root_layout_node.cpp index c0a76b891..05a957804 100644 --- a/poincare/src/nth_root_layout_node.cpp +++ b/poincare/src/nth_root_layout_node.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include @@ -162,11 +162,11 @@ int NthRootLayoutNode::writeTextInBuffer(char * buffer, int bufferSize, Preferen && (const_cast(this))->indexLayout() && !(const_cast(this))->indexLayout()->isEmpty()) { - return LayoutEngine::writePrefixSerializableRefTextInBuffer(SerializableRef(this), buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "root"); + return SerializationHelper::Prefix(SerializableRef(this), buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "root"); } // Case: squareRoot(x) if (!m_hasIndex) { - return LayoutEngine::writePrefixSerializableRefTextInBuffer(SerializableRef(this), buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "\x91"); + return SerializationHelper::Prefix(SerializableRef(this), buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "\x91"); } // Case: root(x,empty) // Write "'SquareRootSymbol'('radicandLayout')". diff --git a/poincare/src/opposite.cpp b/poincare/src/opposite.cpp index 472ad0123..ea219837c 100644 --- a/poincare/src/opposite.cpp +++ b/poincare/src/opposite.cpp @@ -2,10 +2,10 @@ #include #include #include -#include +#include //#include #include -#include +#include extern "C" { #include #include @@ -42,7 +42,7 @@ bool OppositeNode::needsParenthesisWithParent(SerializableNode * e) const { LayoutRef OppositeNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { HorizontalLayoutRef result = HorizontalLayoutRef(CharLayoutRef('-')); if (childAtIndex(0)->type() == Type::Opposite) { - result.addOrMergeChildAtIndex(LayoutEngine::createParenthesedLayout(childAtIndex(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), false), 1, false); + result.addOrMergeChildAtIndex(LayoutHelper::Parentheses(childAtIndex(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), false), 1, false); } else { result.addOrMergeChildAtIndex(childAtIndex(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), 1, false); } @@ -92,7 +92,7 @@ Expression OppositeNode::shallowReduce(Context& context, Preferences::AngleUnit const Expression child = Expression(childAtIndex(0)); #if MATRIX_EXACT_REDUCING if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif MultiplicationReference m = MultiplicationReference(RationalReference(-1), child); diff --git a/poincare/src/parenthesis.cpp b/poincare/src/parenthesis.cpp index ec6a2afd8..67f04c5a2 100644 --- a/poincare/src/parenthesis.cpp +++ b/poincare/src/parenthesis.cpp @@ -14,15 +14,15 @@ int ParenthesisNode::polynomialDegree(char symbolName) const { } LayoutRef ParenthesisNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { - return LayoutEngine::createParenthesedLayout(childAtIndex(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), false); + return LayoutHelper::Parentheses(childAtIndex(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } -Expression ParenthesisNode::shallowReduce(Context& context, Preferences::AngleUnit angleUnit) { - Expression e = ExpressionNode::shallowReduce(context, angleUnit); - if (e.node() != this) { - return e; - } - return Expression(childAtIndex(0)); +int ParenthesisNode::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { + return SerializationHelper::Prefix(Parenthesis(const_cast(this)), buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, ""); +} + +Expression ParenthesisNode::shallowReduce(Context& context, Preferences::AngleUnit angleUnit) const { + return Parenthesis(this).shallowReduce(context, angleUnit); } template diff --git a/poincare/src/power.cpp b/poincare/src/power.cpp index bfc197fe5..542897a04 100644 --- a/poincare/src/power.cpp +++ b/poincare/src/power.cpp @@ -126,7 +126,7 @@ std::complex Power::compute(const std::complex c, const std::complex d) * the result of c^d and if arg ~ 0 [Pi], we discard the residual imaginary * part and if arg ~ Pi/2 [Pi], we discard the residual real part. */ std::complex result = std::pow(c, d); - return ApproximationEngine::truncateRealOrImaginaryPartAccordingToArgument(result); + return ApproximationHelper::TruncateRealOrImaginaryPartAccordingToArgument(result); } template MatrixComplex Power::computeOnComplexAndMatrix(const std::complex c, const MatrixComplex n) { diff --git a/poincare/src/real_part.cpp b/poincare/src/real_part.cpp index fe36fb654..2fd3a21dd 100644 --- a/poincare/src/real_part.cpp +++ b/poincare/src/real_part.cpp @@ -1,5 +1,5 @@ #include -#include +#include extern "C" { #include } @@ -24,7 +24,7 @@ Expression RealPart::shallowReduce(Context& context, Preferences::AngleUnit angl Expression * op = editableOperand(0); #if MATRIX_EXACT_REDUCING if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif if (op->type() == Type::Rational) { diff --git a/poincare/src/layout_engine.cpp b/poincare/src/serialization_helper.cpp similarity index 52% rename from poincare/src/layout_engine.cpp rename to poincare/src/serialization_helper.cpp index 2a858f188..2bbe1ed61 100644 --- a/poincare/src/layout_engine.cpp +++ b/poincare/src/serialization_helper.cpp @@ -1,77 +1,29 @@ -#include -#include -#include -#include -#include -#include +#include #include namespace Poincare { -LayoutRef LayoutEngine::createInfixLayout(const Expression * expression, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName) { - int numberOfChildren = expression->numberOfChildren(); - assert(numberOfChildren > 1); - HorizontalLayoutRef result; - result.addOrMergeChildAtIndex(expression->operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), 0, 0); - for (int i = 1; i < numberOfChildren; i++) { - result.addOrMergeChildAtIndex(createStringLayout(operatorName, strlen(operatorName)), result.numberOfChildren(), true); - result.addOrMergeChildAtIndex( - expression->operand(i)->createLayout(floatDisplayMode, numberOfSignificantDigits), - result.numberOfChildren(), - true); - } - return result; -} - -LayoutRef LayoutEngine::createPrefixLayout(const Expression * expression, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName) { - HorizontalLayoutRef result; - // Add the operator name. - result.addOrMergeChildAtIndex(createStringLayout(operatorName, strlen(operatorName)), 0, true); - - // Create the layout of arguments separated by commas. - HorizontalLayoutRef args; - int numberOfChildren = expression->numberOfChildren(); - if (numberOfChildren > 0) { - args.addOrMergeChildAtIndex(expression->operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), 0, true); - for (int i = 1; i < numberOfChildren; i++) { - args.addChildAtIndex(CharLayoutRef(','), args.numberOfChildren(), args.numberOfChildren(), nullptr); - args.addOrMergeChildAtIndex(expression->operand(i)->createLayout(floatDisplayMode, numberOfSignificantDigits), args.numberOfChildren(), true); +static void writeChildTreeInBuffer(SerializableRef childRef, SerializableRef parentRef, char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfDigits, int * numberOfChar) { + // Write the child with parentheses if needed + bool addParentheses = childRef.needsParenthesisWithParent(parentRef); + if (addParentheses) { + buffer[*numberOfChar] = '('; + numberOfChar++; + if (*numberOfChar >= bufferSize-1) { + return; } } - // Add the parenthesed arguments. - result.addOrMergeChildAtIndex(createParenthesedLayout(args, false), result.numberOfChildren(), true); - return result; -} - -LayoutRef LayoutEngine::createParenthesedLayout(LayoutRef layoutRef, bool cloneLayout) { - HorizontalLayoutRef result; - result.addChildAtIndex(LeftParenthesisLayoutRef(), 0, 0); - if (layoutRef.isDefined()) { - result.addOrMergeChildAtIndex(cloneLayout ? layoutRef.clone() : layoutRef, 1, true); + *numberOfChar += childRef.writeTextInBuffer(buffer + *numberOfChar, bufferSize - *numberOfChar, floatDisplayMode, numberOfDigits); + if (*numberOfChar >= bufferSize-1) { + return; } - result.addChildAtIndex(RightParenthesisLayoutRef(), result.numberOfChildren(), result.numberOfChildren()); - return result; -} - -HorizontalLayoutRef LayoutEngine::createStringLayout(const char * buffer, int bufferSize, KDText::FontSize fontSize) { - assert(bufferSize > 0); - HorizontalLayoutRef resultLayout; - for (int i = 0; i < bufferSize; i++) { - resultLayout.addChildAtIndex(CharLayoutRef(buffer[i], fontSize), i, i, nullptr); + if (addParentheses) { + buffer[*numberOfChar] = ')'; + numberOfChar++; } - return resultLayout; } -LayoutRef LayoutEngine::createLogLayout(LayoutRef argument, LayoutRef index) { - HorizontalLayoutRef resultLayout = createStringLayout("log", 3); - VerticalOffsetLayoutRef offsetLayout = VerticalOffsetLayoutRef(index, VerticalOffsetLayoutNode::Type::Subscript); - resultLayout.addChildAtIndex(offsetLayout, resultLayout.numberOfChildren(), resultLayout.numberOfChildren(), nullptr); - resultLayout.addOrMergeChildAtIndex(createParenthesedLayout(argument, false), resultLayout.numberOfChildren(), true); - return resultLayout; -} - -/* SerializableReference to Text */ -int LayoutEngine::writeInfixSerializableRefTextInBuffer( +int SerializationHelper::Infix( const SerializableRef serializableRef, char * buffer, int bufferSize, @@ -123,7 +75,7 @@ int LayoutEngine::writeInfixSerializableRefTextInBuffer( return numberOfChar; } -int LayoutEngine::writePrefixSerializableRefTextInBuffer( +int SerializationHelper::Prefix( const SerializableRef serializableRef, char * buffer, int bufferSize, @@ -187,28 +139,7 @@ int LayoutEngine::writePrefixSerializableRefTextInBuffer( return numberOfChar; } -void LayoutEngine::writeChildTreeInBuffer(SerializableRef childRef, SerializableRef parentRef, char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfDigits, int * numberOfChar) { - // Write the child with parentheses if needed - bool addParentheses = childRef.needsParenthesisWithParent(parentRef); - if (addParentheses) { - buffer[*numberOfChar] = '('; - numberOfChar++; - if (*numberOfChar >= bufferSize-1) { - return; - } - } - *numberOfChar += childRef.writeTextInBuffer(buffer + *numberOfChar, bufferSize - *numberOfChar, floatDisplayMode, numberOfDigits); - if (*numberOfChar >= bufferSize-1) { - return; - } - if (addParentheses) { - buffer[*numberOfChar] = ')'; - numberOfChar++; - } -} - - -int LayoutEngine::writeOneCharInBuffer(char * buffer, int bufferSize, char charToWrite) { +int SerializationHelper::Char(char * buffer, int bufferSize, char charToWrite) { if (bufferSize == 0) { return -1; } diff --git a/poincare/src/simplification_engine.cpp b/poincare/src/simplification_helper.cpp similarity index 85% rename from poincare/src/simplification_engine.cpp rename to poincare/src/simplification_helper.cpp index 72fbbfc73..ed560d80a 100644 --- a/poincare/src/simplification_engine.cpp +++ b/poincare/src/simplification_helper.cpp @@ -1,10 +1,10 @@ -#include +#include #if MATRIX_EXACT_REDUCING namespace Poincare { -Expression * SimplificationEngine::map(Expression * e, Context & context, Preferences::AngleUnit angleUnit) { +Expression * SimplificationHelper::Map(Expression * e, Context & context, Preferences::AngleUnit angleUnit) { assert(e->numberOfChildren() == 1 && e->operand(0)->type() == Expression::Type::Matrix); Expression * op = e->editableOperand(0); for (int i = 0; i < op->numberOfChildren(); i++) { diff --git a/poincare/src/sine.cpp b/poincare/src/sine.cpp index 80af8c725..3bae26dac 100644 --- a/poincare/src/sine.cpp +++ b/poincare/src/sine.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include extern "C" { #include @@ -40,7 +40,7 @@ Expression Sine::shallowReduce(Context& context, Preferences::AngleUnit angleUni #if MATRIX_EXACT_REDUCING Expression * op = editableOperand(0); if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif return Trigonometry::shallowReduceDirectFunction(this, context, angleUnit); diff --git a/poincare/src/square_root.cpp b/poincare/src/square_root.cpp index 937e3d31e..a155b5ca0 100644 --- a/poincare/src/square_root.cpp +++ b/poincare/src/square_root.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include extern "C" { #include @@ -21,7 +21,7 @@ Expression * SquareRoot::clone() const { static_assert('\x91' == Ion::Charset::Root, "Unicode error"); int SquareRoot::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { - return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "\x91"); + return LayoutHelper::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "\x91"); } template @@ -33,7 +33,7 @@ std::complex SquareRoot::computeOnComplex(const std::complex c, Preference * avoid weird results as sqrt(-1) = 6E-16+i, we compute the argument of * the result of sqrt(c) and if arg ~ 0 [Pi], we discard the residual imaginary * part and if arg ~ Pi/2 [Pi], we discard the residual real part. */ - return ApproximationEngine::truncateRealOrImaginaryPartAccordingToArgument(result); + return ApproximationHelper::TruncateRealOrImaginaryPartAccordingToArgument(result); } Expression SquareRoot::shallowReduce(Context& context, Preferences::AngleUnit angleUnit) { @@ -43,7 +43,7 @@ Expression SquareRoot::shallowReduce(Context& context, Preferences::AngleUnit an } #if MATRIX_EXACT_REDUCING if (operand(0)->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif Power * p = new Power(operand(0), new Rational(1, 2), false); diff --git a/poincare/src/store.cpp b/poincare/src/store.cpp index bb7647876..974402c79 100644 --- a/poincare/src/store.cpp +++ b/poincare/src/store.cpp @@ -25,7 +25,7 @@ int Store::polynomialDegree(char symbolName) const { } int Store::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { - return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "\x90"); + return LayoutHelper::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "\x90"); } Expression Store::shallowReduce(Context& context, Preferences::AngleUnit angleUnit) { diff --git a/poincare/src/symbol.cpp b/poincare/src/symbol.cpp index 5ac41be13..59c5958ed 100644 --- a/poincare/src/symbol.cpp +++ b/poincare/src/symbol.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include #include @@ -100,7 +100,7 @@ int SymbolNode::simplificationOrderSameType(const ExpressionNode * e, bool canBe LayoutRef SymbolNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { if (m_name == Symbol::SpecialSymbols::Ans) { - return LayoutEngine::createStringLayout("ans", 3); + return LayoutHelper::String("ans", 3); } if (m_name == Symbol::SpecialSymbols::un) { return HorizontalLayoutRef( @@ -113,7 +113,7 @@ LayoutRef SymbolNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, return HorizontalLayoutRef( CharLayoutRef('u'), VerticalOffsetLayoutRef( - LayoutEngine::createStringLayout("n+1", 3), + LayoutHelper::String("n+1", 3), VerticalOffsetLayoutNode::Type::Subscript)); } if (m_name == Symbol::SpecialSymbols::vn) { @@ -127,13 +127,13 @@ LayoutRef SymbolNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, return HorizontalLayoutRef( CharLayoutRef('v'), VerticalOffsetLayoutRef( - LayoutEngine::createStringLayout("n+1", 3), + LayoutHelper::String("n+1", 3), VerticalOffsetLayoutNode::Type::Subscript)); } if (Symbol::isMatrixSymbol(m_name) || Symbol::isSeriesSymbol(m_name) || Symbol::isRegressionSymbol(m_name)) { - return LayoutEngine::createStringLayout(Symbol::textForSpecialSymbols(m_name), 2); + return LayoutHelper::String(SymbolReference::textForSpecialSymbols(m_name), 2); } - return LayoutEngine::createStringLayout(&m_name, 1); + return LayoutHelper::String(&m_name, 1); } int SymbolNode::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { diff --git a/poincare/src/tangent.cpp b/poincare/src/tangent.cpp index 3a2b4cbaa..6a8036a0b 100644 --- a/poincare/src/tangent.cpp +++ b/poincare/src/tangent.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include extern "C" { #include } @@ -41,7 +41,7 @@ Expression Tangent::shallowReduce(Context& context, Preferences::AngleUnit angle #if MATRIX_EXACT_REDUCING Expression * op = editableOperand(0); if (op->type() == Type::Matrix) { - return SimplificationEngine::map(this, context, angleUnit); + return SimplificationHelper::Map(this, context, angleUnit); } #endif Expression * newExpression = Trigonometry::shallowReduceDirectFunction(this, context, angleUnit); diff --git a/poincare/src/undefined.cpp b/poincare/src/undefined.cpp index 46ded7ad3..cad11a04e 100644 --- a/poincare/src/undefined.cpp +++ b/poincare/src/undefined.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include extern "C" { #include @@ -21,7 +21,7 @@ int UndefinedNode::polynomialDegree(char symbolName) const { LayoutRef UndefinedNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { char buffer[6]; int numberOfChars = PrintFloat::convertFloatToText(NAN, buffer, 6, numberOfSignificantDigits, floatDisplayMode); - return LayoutEngine::createStringLayout(buffer, numberOfChars); + return LayoutHelper::String(buffer, numberOfChars); } int UndefinedNode::writeTextInBuffer(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { diff --git a/poincare/src/vertical_offset_layout_node.cpp b/poincare/src/vertical_offset_layout_node.cpp index 6c1a17ec8..2ed7df979 100644 --- a/poincare/src/vertical_offset_layout_node.cpp +++ b/poincare/src/vertical_offset_layout_node.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include #include @@ -168,23 +168,23 @@ int VerticalOffsetLayoutNode::writeTextInBuffer(char * buffer, int bufferSize, P return 0; } // If the layout is a subscript, write "_{indice}" - int numberOfChar = LayoutEngine::writeOneCharInBuffer(buffer, bufferSize, '_'); + int numberOfChar = SerializationHelper::Char(buffer, bufferSize, '_'); if (numberOfChar >= bufferSize-1) { return bufferSize-1; } - numberOfChar += LayoutEngine::writeOneCharInBuffer(buffer+numberOfChar, bufferSize-numberOfChar, '{'); + numberOfChar += SerializationHelper::Char(buffer+numberOfChar, bufferSize-numberOfChar, '{'); if (numberOfChar >= bufferSize-1) { return bufferSize-1; } numberOfChar += const_cast(this)->indiceLayout()->writeTextInBuffer(buffer+numberOfChar, bufferSize-numberOfChar, floatDisplayMode, numberOfSignificantDigits); if (numberOfChar >= bufferSize-1) { return bufferSize-1; } - numberOfChar += LayoutEngine::writeOneCharInBuffer(buffer+numberOfChar, bufferSize-numberOfChar, '}'); + numberOfChar += SerializationHelper::Char(buffer+numberOfChar, bufferSize-numberOfChar, '}'); if (numberOfChar >= bufferSize-1) { return bufferSize-1; } return numberOfChar; } assert(m_type == Type::Superscript); // If the layout is a superscript, write "^(indice)" - int numberOfChar = LayoutEngine::writePrefixSerializableRefTextInBuffer(SerializableRef(this), buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "^"); + int numberOfChar = SerializationHelper::Prefix(SerializableRef(this), buffer, bufferSize, floatDisplayMode, numberOfSignificantDigits, "^"); if (numberOfChar >= bufferSize-1) { return bufferSize-1; } // Add a multiplication if omitted. diff --git a/poincare/test/fraction_layout.cpp b/poincare/test/fraction_layout.cpp index 312e55da8..1e30b7d28 100644 --- a/poincare/test/fraction_layout.cpp +++ b/poincare/test/fraction_layout.cpp @@ -13,7 +13,7 @@ QUIZ_CASE(poincare_fraction_layout_create) { * 12|34+5 -> "Divide" -> --- + 5 * |34 * */ - HorizontalLayout * layout = static_cast(LayoutEngine::createStringLayout("1234+5", 6)); + HorizontalLayout * layout = static_cast(LayoutHelper::String("1234+5", 6)); ExpressionLayoutCursor cursor(layout->editableChild(2), ExpressionLayoutCursor::Position::Left); cursor.addFractionLayoutAndCollapseSiblings(); assert_expression_layout_serialize_to(layout, "(12)/(34)+5"); @@ -29,8 +29,8 @@ QUIZ_CASE(poincare_fraction_layout_delete) { * */ HorizontalLayout * layout1 = new HorizontalLayout( new FractionLayout( - LayoutEngine::createStringLayout("12", 2), - LayoutEngine::createStringLayout("34", 2), + LayoutHelper::String("12", 2), + LayoutHelper::String("34", 2), false), false); ExpressionLayoutCursor cursor1(layout1->editableChild(0)->editableChild(1), ExpressionLayoutCursor::Position::Left); @@ -61,7 +61,7 @@ QUIZ_CASE(poincare_fraction_layout_delete) { QUIZ_CASE(poincare_fraction_layout_serialize) { FractionLayout * layout = new FractionLayout( new CharLayout('1'), - LayoutEngine::createStringLayout("2+3", 3), + LayoutHelper::String("2+3", 3), false); assert_expression_layout_serialize_to(layout, "(1)/(2+3)"); delete layout; diff --git a/poincare/test/vertical_offset_layout.cpp b/poincare/test/vertical_offset_layout.cpp index 3361ef9a7..d0de63c9b 100644 --- a/poincare/test/vertical_offset_layout.cpp +++ b/poincare/test/vertical_offset_layout.cpp @@ -13,7 +13,7 @@ QUIZ_CASE(poincare_vertical_offset_layout_serialize) { HorizontalLayout * layout = new HorizontalLayout( new CharLayout('2'), new VerticalOffsetLayout( - LayoutEngine::createStringLayout("4+5", 3), + LayoutHelper::String("4+5", 3), VerticalOffsetLayout::Type::Superscript, false), false);