diff --git a/apps/calculation/calculation.cpp b/apps/calculation/calculation.cpp index 192d7b41b..3ea487ee8 100644 --- a/apps/calculation/calculation.cpp +++ b/apps/calculation/calculation.cpp @@ -1,8 +1,11 @@ #include "calculation.h" #include "calculation_store.h" +#include "../shared/poincare_helpers.h" #include #include + using namespace Poincare; +using namespace Shared; namespace Calculation { @@ -106,7 +109,7 @@ Expression * Calculation::input() { ExpressionLayout * Calculation::createInputLayout() { if (input() != nullptr) { - return input()->createLayout(PrintFloat::Mode::Decimal, Expression::ComplexFormat::Cartesian); + return input()->createLayout(PrintFloat::Mode::Decimal, PrintFloat::k_numberOfStoredSignificantDigits); } return nullptr; } @@ -158,7 +161,7 @@ Expression * Calculation::exactOutput(Context * context) { ExpressionLayout * Calculation::createExactOutputLayout(Context * context) { if (exactOutput(context) != nullptr) { - return exactOutput(context)->createLayout(); + return PoincareHelpers::CreateLayout(exactOutput(context)); } return nullptr; } @@ -180,7 +183,7 @@ Expression * Calculation::approximateOutput(Context * context) { ExpressionLayout * Calculation::createApproximateOutputLayout(Context * context) { if (approximateOutput(context) != nullptr) { - return approximateOutput(context)->createLayout(); + return PoincareHelpers::CreateLayout(approximateOutput(context)); } return nullptr; } diff --git a/apps/graph/graph/graph_controller_helper.cpp b/apps/graph/graph/graph_controller_helper.cpp index 579eb5519..16ba0f33e 100644 --- a/apps/graph/graph/graph_controller_helper.cpp +++ b/apps/graph/graph/graph_controller_helper.cpp @@ -1,5 +1,6 @@ #include "graph_controller_helper.h" #include "../../constant.h" +#include "../../shared/poincare_helpers.h" using namespace Shared; using namespace Poincare; @@ -25,7 +26,7 @@ void GraphControllerHelper::reloadDerivativeInBannerViewForCursorOnFunction(Shar buffer[0] = function->name()[0]; buffer[1] = '\''; double y = function->approximateDerivative(cursor->x(), app->localContext()); - numberOfChar += PrintFloat::convertFloatToText(y, buffer + legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::ShortNumberOfSignificantDigits), Constant::ShortNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(y, buffer + legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::ShortNumberOfSignificantDigits), Constant::ShortNumberOfSignificantDigits); strlcpy(buffer+numberOfChar, space, spaceLength+1); buffer[k_maxDigitLegendLength+6] = 0; bannerView()->setLegendAtIndex(buffer, 2); diff --git a/apps/graph/graph/intersection_graph_controller.cpp b/apps/graph/graph/intersection_graph_controller.cpp index 86168890d..edec549e7 100644 --- a/apps/graph/graph/intersection_graph_controller.cpp +++ b/apps/graph/graph/intersection_graph_controller.cpp @@ -1,5 +1,6 @@ #include "intersection_graph_controller.h" #include "../app.h" +#include "../../shared/poincare_helpers.h" using namespace Shared; using namespace Poincare; @@ -30,7 +31,7 @@ void IntersectionGraphController::reloadBannerView() { numberOfChar += legendLength; buffer[0] = m_function->name()[0]; buffer[5] = m_intersectedFunction->name()[0]; - numberOfChar += PrintFloat::convertFloatToText(m_cursor->y(), buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(m_cursor->y(), buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); strlcpy(buffer+numberOfChar, space, spaceLength+1); buffer[FunctionBannerDelegate::k_maxDigitLegendLength+legendLength] = 0; bannerView()->setLegendAtIndex(buffer, 1); diff --git a/apps/graph/graph/tangent_graph_controller.cpp b/apps/graph/graph/tangent_graph_controller.cpp index 4d6b30f59..7180963cf 100644 --- a/apps/graph/graph/tangent_graph_controller.cpp +++ b/apps/graph/graph/tangent_graph_controller.cpp @@ -1,4 +1,5 @@ #include "tangent_graph_controller.h" +#include "../../shared/poincare_helpers.h" #include "../app.h" using namespace Shared; @@ -46,14 +47,14 @@ void TangentGraphController::reloadBannerView() { int legendLength = strlen(legend); strlcpy(buffer, legend, legendLength+1); double y = m_function->approximateDerivative(m_cursor->x(), myApp->localContext()); - PrintFloat::convertFloatToText(y, buffer + legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(y, buffer + legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); m_bannerView->setLegendAtIndex(buffer, 4); legend = "b="; legendLength = strlen(legend); strlcpy(buffer, legend, legendLength+1); y = -y*m_cursor->x()+m_function->evaluateAtAbscissa(m_cursor->x(), myApp->localContext()); - PrintFloat::convertFloatToText(y, buffer + legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(y, buffer + legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); m_bannerView->setLegendAtIndex(buffer, 5); } diff --git a/apps/hardware_test/battery_test_controller.cpp b/apps/hardware_test/battery_test_controller.cpp index f47f11c71..c086d26af 100644 --- a/apps/hardware_test/battery_test_controller.cpp +++ b/apps/hardware_test/battery_test_controller.cpp @@ -44,7 +44,7 @@ void BatteryTestController::updateBatteryState(float batteryLevel, bool batteryC const char * legend = "Battery level: "; int legendLength = strlen(legend); strlcpy(bufferLevel, legend, legendLength+1); - PrintFloat::convertFloatToText(batteryLevel, bufferLevel+legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + PrintFloat::convertFloatToText(batteryLevel, bufferLevel+legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits, PrintFloat::Mode::Decimal); m_view.batteryLevelTextView()->setText(bufferLevel); char bufferCharging[ContentView::k_maxNumberOfCharacters + PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)]; diff --git a/apps/regression/calculation_controller.cpp b/apps/regression/calculation_controller.cpp index 19daf6071..7acfb4cc8 100644 --- a/apps/regression/calculation_controller.cpp +++ b/apps/regression/calculation_controller.cpp @@ -1,6 +1,7 @@ #include "calculation_controller.h" #include "../constant.h" #include "../apps_container.h" +#include "../shared/poincare_helpers.h" #include "../../poincare/src/layout/char_layout.h" #include "../../poincare/src/layout/horizontal_layout.h" #include "../../poincare/src/layout/vertical_offset_layout.h" @@ -157,9 +158,9 @@ void CalculationController::willDisplayCellAtLocation(HighlightCell * cell, int double calculation2 = (m_store->*calculationMethods[j-1])(seriesNumber, 1); EvenOddDoubleBufferTextCellWithSeparator * myCell = (EvenOddDoubleBufferTextCellWithSeparator *)cell; char buffer[PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)]; - PrintFloat::convertFloatToText(calculation1, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(calculation1, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); myCell->setFirstText(buffer); - PrintFloat::convertFloatToText(calculation2, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(calculation2, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); myCell->setSecondText(buffer); return; } @@ -175,7 +176,7 @@ void CalculationController::willDisplayCellAtLocation(HighlightCell * cell, int CalculPointer calculationMethods[] = {&Store::doubleCastedNumberOfPairsOfSeries, &Store::covariance, &Store::columnProductSum}; double calculation = (m_store->*calculationMethods[j-k_totalNumberOfDoubleBufferRows-1])(seriesNumber); char buffer[PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)]; - PrintFloat::convertFloatToText(calculation, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(calculation, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); bufferCell->setText(buffer); return; } @@ -206,7 +207,7 @@ void CalculationController::willDisplayCellAtLocation(HighlightCell * cell, int CalculPointer calculationMethods[2] = {&Store::correlationCoefficient, &Store::squaredCorrelationCoefficient}; double calculation = (m_store->*calculationMethods[j - k_regressionCellIndex - maxNumberCoefficients - 1])(seriesNumber); char buffer[PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)]; - PrintFloat::convertFloatToText(calculation, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(calculation, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); bufferCell->setText(buffer); return; } else { @@ -221,7 +222,7 @@ void CalculationController::willDisplayCellAtLocation(HighlightCell * cell, int return; } else { char buffer[PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)]; - PrintFloat::convertFloatToText(coefficients[j - k_regressionCellIndex - 1], buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(coefficients[j - k_regressionCellIndex - 1], buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); bufferCell->setText(buffer); return; } diff --git a/apps/regression/graph_controller.cpp b/apps/regression/graph_controller.cpp index 96014daa0..650f67e99 100644 --- a/apps/regression/graph_controller.cpp +++ b/apps/regression/graph_controller.cpp @@ -1,4 +1,5 @@ #include "graph_controller.h" +#include "../shared/poincare_helpers.h" #include "../apps_container.h" #include #include @@ -125,7 +126,7 @@ void GraphController::reloadBannerView() { legendLength = strlen(legend); strlcpy(buffer, legend, legendLength+1); numberOfChar += legendLength; - numberOfChar += PrintFloat::convertFloatToText(x, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(x, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); for (int i = numberOfChar; i < k_maxLegendLength; i++) { buffer[numberOfChar++] = ' '; } @@ -144,7 +145,7 @@ void GraphController::reloadBannerView() { legendLength = strlen(legend); strlcpy(buffer, legend, legendLength+1); numberOfChar += legendLength; - numberOfChar += PrintFloat::convertFloatToText(y, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(y, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); for (int i = numberOfChar; i < k_maxLegendLength; i++) { buffer[numberOfChar++] = ' '; } @@ -182,7 +183,7 @@ void GraphController::reloadBannerView() { legendLength = strlen(legend); strlcpy(buffer, legend, legendLength+1); numberOfChar += legendLength; - numberOfChar += PrintFloat::convertFloatToText(coefficients[i], buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(coefficients[i], buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); buffer[k_maxLegendLength] = 0; m_bannerView.setLegendAtIndex(buffer, 4 + i); coefficientName++; @@ -196,7 +197,7 @@ void GraphController::reloadBannerView() { legendLength = strlen(legend); strlcpy(buffer, legend, legendLength+1); numberOfChar += legendLength; - numberOfChar += PrintFloat::convertFloatToText(r, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(r, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); buffer[k_maxLegendLength+10] = 0; m_bannerView.setLegendAtIndex(buffer, 6); @@ -207,7 +208,7 @@ void GraphController::reloadBannerView() { legendLength = strlen(legend); strlcpy(buffer, legend, legendLength+1); numberOfChar += legendLength; - numberOfChar += PrintFloat::convertFloatToText(r2, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(r2, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); buffer[k_maxLegendLength] = 0; m_bannerView.setLegendAtIndex(buffer, 7); diff --git a/apps/sequence/sequence.cpp b/apps/sequence/sequence.cpp index e5fb14b5e..8f5b68410 100644 --- a/apps/sequence/sequence.cpp +++ b/apps/sequence/sequence.cpp @@ -5,6 +5,7 @@ #include "../../poincare/src/layout/char_layout.h" #include "../../poincare/src/layout/horizontal_layout.h" #include "../../poincare/src/layout/vertical_offset_layout.h" +#include "../shared/poincare_helpers.h" #include #include @@ -167,7 +168,7 @@ Poincare::ExpressionLayout * Sequence::firstInitialConditionLayout() { if (m_firstInitialConditionLayout == nullptr) { Expression * nonSimplifedExpression = Expression::parse(m_firstInitialConditionText); if (nonSimplifedExpression) { - m_firstInitialConditionLayout = nonSimplifedExpression->createLayout(PrintFloat::Mode::Decimal); + m_firstInitialConditionLayout = PoincareHelpers::CreateLayout(nonSimplifedExpression); delete nonSimplifedExpression; } } @@ -178,7 +179,7 @@ Poincare::ExpressionLayout * Sequence::secondInitialConditionLayout() { if (m_secondInitialConditionLayout == nullptr) { Expression * nonSimplifedExpression = Expression::parse(m_secondInitialConditionText); if (nonSimplifedExpression) { - m_secondInitialConditionLayout = nonSimplifedExpression->createLayout(PrintFloat::Mode::Decimal); + m_secondInitialConditionLayout = PoincareHelpers::CreateLayout(nonSimplifedExpression); delete nonSimplifedExpression; } } diff --git a/apps/shared/expression_model.cpp b/apps/shared/expression_model.cpp index b962212d5..e5d8f3aef 100644 --- a/apps/shared/expression_model.cpp +++ b/apps/shared/expression_model.cpp @@ -1,4 +1,5 @@ #include "function.h" +#include "poincare_helpers.h" #include #include #include @@ -48,7 +49,7 @@ Poincare::ExpressionLayout * ExpressionModel::layout() { if (m_layout == nullptr) { Expression * nonSimplifiedExpression = Expression::parse(m_text); if (nonSimplifiedExpression != nullptr) { - m_layout = nonSimplifiedExpression->createLayout(PrintFloat::Mode::Decimal); + m_layout = PoincareHelpers::CreateLayout(nonSimplifiedExpression); delete nonSimplifiedExpression; } } diff --git a/apps/shared/function_banner_delegate.cpp b/apps/shared/function_banner_delegate.cpp index 72c686962..404b2fe47 100644 --- a/apps/shared/function_banner_delegate.cpp +++ b/apps/shared/function_banner_delegate.cpp @@ -1,4 +1,5 @@ #include "function_banner_delegate.h" +#include "poincare_helpers.h" #include "../constant.h" using namespace Poincare; @@ -15,7 +16,7 @@ void FunctionBannerDelegate::reloadBannerViewForCursorOnFunction(CurveViewCursor strlcpy(buffer, legend, legendLength+1); numberOfChar += legendLength; buffer[0] = symbol; - numberOfChar += PrintFloat::convertFloatToText(cursor->x(), buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(cursor->x(), buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); strlcpy(buffer+numberOfChar, space, spaceLength+1); buffer[k_maxDigitLegendLength+2] = 0; bannerView()->setLegendAtIndex(buffer, 0); @@ -27,7 +28,7 @@ void FunctionBannerDelegate::reloadBannerViewForCursorOnFunction(CurveViewCursor strlcpy(buffer, legend, legendLength+1); buffer[2] = symbol; buffer[0] = function->name()[0]; - numberOfChar += PrintFloat::convertFloatToText(cursor->y(), buffer+legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(cursor->y(), buffer+legendLength, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::MediumNumberOfSignificantDigits), Constant::MediumNumberOfSignificantDigits); strlcpy(buffer+numberOfChar, space, spaceLength+1); buffer[k_maxDigitLegendLength+5] = 0; bannerView()->setLegendAtIndex(buffer, 1); diff --git a/apps/shared/poincare_helpers.h b/apps/shared/poincare_helpers.h new file mode 100644 index 000000000..39bfeea57 --- /dev/null +++ b/apps/shared/poincare_helpers.h @@ -0,0 +1,24 @@ +#ifndef SHARED_POINCARE_HELPERS_H +#define SHARED_POINCARE_HELPERS_H + +#include + +namespace Shared { + +namespace PoincareHelpers { + +inline Poincare::ExpressionLayout * CreateLayout(const Poincare::Expression * e) { + return e->createLayout(Poincare::Preferences::sharedPreferences()->displayMode(), Poincare::Preferences::sharedPreferences()->numberOfSignificantDigits()); +} + +template +inline int ConvertFloatToText(T d, char * buffer, int bufferSize, int numberOfSignificantDigits) { + return Poincare::PrintFloat::convertFloatToText(d, buffer, bufferSize, numberOfSignificantDigits, Poincare::Preferences::sharedPreferences()->displayMode()); +} + +} + +} + +#endif + diff --git a/apps/shared/sum_graph_controller.cpp b/apps/shared/sum_graph_controller.cpp index 49a31a458..6bdcccacf 100644 --- a/apps/shared/sum_graph_controller.cpp +++ b/apps/shared/sum_graph_controller.cpp @@ -1,6 +1,7 @@ #include "sum_graph_controller.h" #include "../apps_container.h" #include +#include "poincare_helpers.h" #include "../../poincare/src/layout/condensed_sum_layout.h" #include @@ -266,7 +267,7 @@ void SumGraphController::LegendView::setSumSymbol(Step step, double start, doubl false); ExpressionLayout * childrenLayouts[3]; strlcpy(buffer, "= ", 3); - PrintFloat::convertFloatToText(result, buffer+2, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(result, buffer+2, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); childrenLayouts[2] = LayoutEngine::createStringLayout(buffer, strlen(buffer), KDText::FontSize::Small); childrenLayouts[1] = functionLayout; childrenLayouts[0] = m_sumLayout; diff --git a/apps/shared/values_controller.cpp b/apps/shared/values_controller.cpp index 71ddd028f..1b767f870 100644 --- a/apps/shared/values_controller.cpp +++ b/apps/shared/values_controller.cpp @@ -2,6 +2,7 @@ #include "text_field_delegate_app.h" #include "../constant.h" #include "../apps_container.h" +#include "poincare_helpers.h" #include using namespace Poincare; @@ -118,7 +119,7 @@ Button * ValuesController::buttonAtIndex(int index, ButtonRowController::Positio } void ValuesController::willDisplayCellAtLocation(HighlightCell * cell, int i, int j) { - willDisplayCellAtLocationWithDisplayMode(cell, i, j, PrintFloat::Mode::Default); + willDisplayCellAtLocationWithDisplayMode(cell, i, j, Preferences::sharedPreferences()->displayMode()); if (cellAtLocationIsEditable(i, j)) { return; } @@ -138,7 +139,7 @@ void ValuesController::willDisplayCellAtLocation(HighlightCell * cell, int i, in // The cell is a value cell EvenOddBufferTextCell * myValueCell = (EvenOddBufferTextCell *)cell; double x = m_interval->element(j-1); - PrintFloat::convertFloatToText(evaluationOfAbscissaAtColumn(x, i), buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(evaluationOfAbscissaAtColumn(x, i), buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); myValueCell->setText(buffer); } } diff --git a/apps/solver/equation_models_parameter_controller.cpp b/apps/solver/equation_models_parameter_controller.cpp index 943937583..045836465 100644 --- a/apps/solver/equation_models_parameter_controller.cpp +++ b/apps/solver/equation_models_parameter_controller.cpp @@ -1,5 +1,6 @@ #include "equation_models_parameter_controller.h" #include "list_controller.h" +#include "../constant.h" #include #include #include "../i18n.h" @@ -22,7 +23,7 @@ EquationModelsParameterController::EquationModelsParameterController(Responder * m_selectableTableView.setShowsIndicators(false); for (int i = 0; i < k_numberOfExpressionCells; i++) { Poincare::Expression * e = Expression::parse(k_models[i+1]); - m_expressionLayouts[i] = e->createLayout(Poincare::PrintFloat::Mode::Decimal, Poincare::Expression::ComplexFormat::Cartesian); + m_expressionLayouts[i] = e->createLayout(Poincare::PrintFloat::Mode::Decimal, Constant::ShortNumberOfSignificantDigits); delete e; m_modelCells[i].setExpressionLayout(m_expressionLayouts[i]); } diff --git a/apps/solver/equation_store.cpp b/apps/solver/equation_store.cpp index 488f36acd..ae2c922d2 100644 --- a/apps/solver/equation_store.cpp +++ b/apps/solver/equation_store.cpp @@ -1,7 +1,9 @@ #include "equation_store.h" +#include "../shared/poincare_helpers.h" #include using namespace Poincare; +using namespace Shared; namespace Solver { @@ -158,9 +160,9 @@ EquationStore::Error EquationStore::exactSolve(Poincare::Context * context) { /* Turn the results in layouts */ for (int i = 0; i < k_maxNumberOfExactSolutions; i++) { if (exactSolutions[i]) { - m_exactSolutionExactLayouts[i] = exactSolutions[i]->createLayout(); + m_exactSolutionExactLayouts[i] = PoincareHelpers::CreateLayout(exactSolutions[i]); Expression * approximate = exactSolutions[i]->approximate(*context); - m_exactSolutionApproximateLayouts[i] = approximate->createLayout(); + m_exactSolutionApproximateLayouts[i] = PoincareHelpers::CreateLayout(approximate); /* Check for identity between exact and approximate layouts */ char exactBuffer[Shared::ExpressionModel::k_expressionBufferSize]; char approximateBuffer[Shared::ExpressionModel::k_expressionBufferSize]; diff --git a/apps/solver/solutions_controller.cpp b/apps/solver/solutions_controller.cpp index 8a3ca7a59..a6eeb6110 100644 --- a/apps/solver/solutions_controller.cpp +++ b/apps/solver/solutions_controller.cpp @@ -1,6 +1,7 @@ #include "solutions_controller.h" #include "app.h" #include "../constant.h" +#include "../shared/poincare_helpers.h" #include #include @@ -173,7 +174,7 @@ void SolutionsController::willDisplayCellAtLocation(HighlightCell * cell, int i, if (m_equationStore->type() == EquationStore::Type::Monovariable) { EvenOddBufferTextCell * valueCell = static_cast(cell); char bufferValue[PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)]; - PrintFloat::convertFloatToText(m_equationStore->approximateSolutionAtIndex(j), bufferValue, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(m_equationStore->approximateSolutionAtIndex(j), bufferValue, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); valueCell->setText(bufferValue); } else { Shared::ScrollableExactApproximateExpressionsCell * valueCell = static_cast(cell); diff --git a/apps/statistics/box_controller.cpp b/apps/statistics/box_controller.cpp index 5eca85d47..6d1617018 100644 --- a/apps/statistics/box_controller.cpp +++ b/apps/statistics/box_controller.cpp @@ -1,8 +1,10 @@ #include "box_controller.h" #include "app.h" +#include "../shared/poincare_helpers.h" #include "../apps_container.h" using namespace Poincare; +using namespace Shared; namespace Statistics { @@ -53,7 +55,7 @@ void BoxController::reloadBannerView() { CalculPointer calculationMethods[5] = {&Store::minValue, &Store::firstQuartile, &Store::median, &Store::thirdQuartile, &Store::maxValue}; double calculation = (m_store->*calculationMethods[selectedQuantile])(selectedSeriesIndex()); - int numberOfChar = PrintFloat::convertFloatToText(calculation, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + int numberOfChar = PoincareHelpers::ConvertFloatToText(calculation, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); buffer[numberOfChar++] = ' '; buffer[numberOfChar] = 0; m_view.editableBannerView()->setLegendAtIndex(buffer, 2); diff --git a/apps/statistics/calculation_controller.cpp b/apps/statistics/calculation_controller.cpp index eb51799d6..a1a1fb707 100644 --- a/apps/statistics/calculation_controller.cpp +++ b/apps/statistics/calculation_controller.cpp @@ -3,6 +3,7 @@ #include "calculation_selectable_table_view.h" #include "../constant.h" #include "../apps_container.h" +#include "../shared/poincare_helpers.h" #include #include @@ -87,7 +88,7 @@ void CalculationController::willDisplayCellAtLocation(HighlightCell * cell, int double calculation = (m_store->*calculationMethods[j-1])(seriesIndex); EvenOddBufferTextCell * calculationCell = static_cast(cell); char buffer[PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)]; - PrintFloat::convertFloatToText(calculation, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + PoincareHelpers::ConvertFloatToText(calculation, buffer, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); calculationCell->setText(buffer); } diff --git a/apps/statistics/histogram_controller.cpp b/apps/statistics/histogram_controller.cpp index d0a818f33..f67769491 100644 --- a/apps/statistics/histogram_controller.cpp +++ b/apps/statistics/histogram_controller.cpp @@ -1,5 +1,6 @@ #include "histogram_controller.h" #include "../apps_container.h" +#include "../shared/poincare_helpers.h" #include "app.h" #include #include @@ -99,7 +100,7 @@ void HistogramController::reloadBannerView() { // Add lower bound if (selectedSeriesIndex() >= 0) { double lowerBound = m_store->startOfBarAtIndex(selectedSeriesIndex(), *m_selectedBarIndex); - numberOfChar += PrintFloat::convertFloatToText(lowerBound, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(lowerBound, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); } buffer[numberOfChar++] = ';'; @@ -107,9 +108,8 @@ void HistogramController::reloadBannerView() { // Add upper bound if (selectedSeriesIndex() >= 0) { double upperBound = m_store->endOfBarAtIndex(selectedSeriesIndex(), *m_selectedBarIndex); - numberOfChar += PrintFloat::convertFloatToText(upperBound, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(upperBound, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); } - buffer[numberOfChar++] = '['; // Padding @@ -128,7 +128,7 @@ void HistogramController::reloadBannerView() { double size = 0; if (selectedSeriesIndex() >= 0) { size = m_store->heightOfBarAtIndex(selectedSeriesIndex(), *m_selectedBarIndex); - numberOfChar += PrintFloat::convertFloatToText(size, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(size, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); } // Padding for (int i = numberOfChar; i < k_maxLegendLength; i++) { @@ -145,7 +145,7 @@ void HistogramController::reloadBannerView() { numberOfChar += legendLength; if (selectedSeriesIndex() >= 0) { double frequency = size/m_store->sumOfOccurrences(selectedSeriesIndex()); - numberOfChar += PrintFloat::convertFloatToText(frequency, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(frequency, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); } // Padding for (int i = numberOfChar; i < k_maxLegendLength; i++) { diff --git a/apps/variable_box_controller.cpp b/apps/variable_box_controller.cpp index 02a8ea27a..4fba523a2 100644 --- a/apps/variable_box_controller.cpp +++ b/apps/variable_box_controller.cpp @@ -255,7 +255,7 @@ const Expression * VariableBoxController::ContentViewController::expressionForIn ExpressionLayout * VariableBoxController::ContentViewController::expressionLayoutForIndex(int index) { if (m_currentPage == Page::Matrix) { const Symbol symbol = Symbol::matrixSymbol('0'+(char)index); - return m_context->expressionLayoutForSymbol(&symbol); + return m_context->expressionLayoutForSymbol(&symbol, Constant::LargeNumberOfSignificantDigits); } #if LIST_VARIABLES if (m_currentPage == Page::List) { diff --git a/escher/src/expression_layout_field.cpp b/escher/src/expression_layout_field.cpp index 91f57bf7a..3d095bec3 100644 --- a/escher/src/expression_layout_field.cpp +++ b/escher/src/expression_layout_field.cpp @@ -213,7 +213,7 @@ bool ExpressionLayoutField::handleEventWithText(const char * text, bool indentat m_contentView.cursor()->insertText(text); return true; } - Poincare::ExpressionLayout * resultLayout = resultExpression->createLayout(); + Poincare::ExpressionLayout * resultLayout = resultExpression->createLayout(Poincare::Preferences::sharedPreferences()->displayMode(), Poincare::Preferences::sharedPreferences()->numberOfSignificantDigits()); delete resultExpression; if (currentNumberOfLayouts + resultLayout->numberOfDescendants(true) >= k_maxNumberOfLayouts) { delete resultLayout; diff --git a/ion/src/device/bench/command/adc.cpp b/ion/src/device/bench/command/adc.cpp index 30d2eaf79..1e79afe5f 100644 --- a/ion/src/device/bench/command/adc.cpp +++ b/ion/src/device/bench/command/adc.cpp @@ -17,7 +17,7 @@ void ADC(const char * input) { constexpr int precision = 8; constexpr int bufferSize = Poincare::PrintFloat::bufferSizeForFloatsWithPrecision(precision); char responseBuffer[bufferSize+4] = {'A', 'D', 'C', '='}; // ADC= - Poincare::PrintFloat::convertFloatToText(result, responseBuffer+4, bufferSize, precision); + Poincare::PrintFloat::convertFloatToText(result, responseBuffer+4, bufferSize, precision, Poincare::PrintFloat::Mode::Decimal); reply(responseBuffer); } diff --git a/poincare/include/poincare/absolute_value.h b/poincare/include/poincare/absolute_value.h index 71932af61..916aad5e5 100644 --- a/poincare/include/poincare/absolute_value.h +++ b/poincare/include/poincare/absolute_value.h @@ -16,7 +16,7 @@ public: private: Expression * setSign(Sign s, Context & context, AngleUnit angleUnit) override; /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, "abs"); } diff --git a/poincare/include/poincare/addition.h b/poincare/include/poincare/addition.h index 76bdf357c..02f98610c 100644 --- a/poincare/include/poincare/addition.h +++ b/poincare/include/poincare/addition.h @@ -32,8 +32,8 @@ public: private: /* Layout */ bool needParenthesisWithParent(const Expression * e) const override; - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createInfixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createInfixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/approximation.h b/poincare/include/poincare/approximation.h index c4c559a55..4f058b69e 100644 --- a/poincare/include/poincare/approximation.h +++ b/poincare/include/poincare/approximation.h @@ -42,7 +42,7 @@ public: } private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { assert(false); return nullptr; } diff --git a/poincare/include/poincare/arc_cosine.h b/poincare/include/poincare/arc_cosine.h index 62fc3b053..5112d4f57 100644 --- a/poincare/include/poincare/arc_cosine.h +++ b/poincare/include/poincare/arc_cosine.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/arc_sine.h b/poincare/include/poincare/arc_sine.h index 2d2a823ad..f0702c009 100644 --- a/poincare/include/poincare/arc_sine.h +++ b/poincare/include/poincare/arc_sine.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/arc_tangent.h b/poincare/include/poincare/arc_tangent.h index 26cbd5756..ddb3572a0 100644 --- a/poincare/include/poincare/arc_tangent.h +++ b/poincare/include/poincare/arc_tangent.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/binomial_coefficient.h b/poincare/include/poincare/binomial_coefficient.h index a3c64d792..e0cf61ea5 100644 --- a/poincare/include/poincare/binomial_coefficient.h +++ b/poincare/include/poincare/binomial_coefficient.h @@ -15,7 +15,7 @@ public: private: constexpr static int k_maxNValue = 300; /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, "binomial"); } diff --git a/poincare/include/poincare/ceiling.h b/poincare/include/poincare/ceiling.h index cd0fc9926..1fe857201 100644 --- a/poincare/include/poincare/ceiling.h +++ b/poincare/include/poincare/ceiling.h @@ -14,7 +14,7 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); } diff --git a/poincare/include/poincare/complex_argument.h b/poincare/include/poincare/complex_argument.h index 0cfcc5738..d90003f28 100644 --- a/poincare/include/poincare/complex_argument.h +++ b/poincare/include/poincare/complex_argument.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/confidence_interval.h b/poincare/include/poincare/confidence_interval.h index ea95aa054..b6ac137b1 100644 --- a/poincare/include/poincare/confidence_interval.h +++ b/poincare/include/poincare/confidence_interval.h @@ -14,8 +14,8 @@ public: int polynomialDegree(char symbolName) const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/conjugate.h b/poincare/include/poincare/conjugate.h index 10a0fa5b3..b8396cee0 100644 --- a/poincare/include/poincare/conjugate.h +++ b/poincare/include/poincare/conjugate.h @@ -14,7 +14,7 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, "conj"); } diff --git a/poincare/include/poincare/cosine.h b/poincare/include/poincare/cosine.h index 942f811f4..d0d4aa281 100644 --- a/poincare/include/poincare/cosine.h +++ b/poincare/include/poincare/cosine.h @@ -21,8 +21,8 @@ public: } private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/decimal.h b/poincare/include/poincare/decimal.h index 5b8559aa7..ca8190bb0 100644 --- a/poincare/include/poincare/decimal.h +++ b/poincare/include/poincare/decimal.h @@ -32,7 +32,7 @@ private: int simplificationOrderSameType(const Expression * e, bool canBeInterrupted) const override; /* Layout */ bool needParenthesisWithParent(const Expression * e) const override; - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; /* Simplification */ Expression * shallowReduce(Context& context, AngleUnit angleUnit) override; Expression * shallowBeautify(Context& context, AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/derivative.h b/poincare/include/poincare/derivative.h index 11bd0fad1..afff33779 100644 --- a/poincare/include/poincare/derivative.h +++ b/poincare/include/poincare/derivative.h @@ -15,8 +15,8 @@ public: int polynomialDegree(char symbolName) const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/determinant.h b/poincare/include/poincare/determinant.h index d59dbd111..7a004d6e1 100644 --- a/poincare/include/poincare/determinant.h +++ b/poincare/include/poincare/determinant.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/division.h b/poincare/include/poincare/division.h index 515496540..d9108399b 100644 --- a/poincare/include/poincare/division.h +++ b/poincare/include/poincare/division.h @@ -20,7 +20,7 @@ public: private: /* Layout */ bool needParenthesisWithParent(const Expression * e) const override; - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, "/"); } diff --git a/poincare/include/poincare/division_quotient.h b/poincare/include/poincare/division_quotient.h index 02b96ca61..c199b91af 100644 --- a/poincare/include/poincare/division_quotient.h +++ b/poincare/include/poincare/division_quotient.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/division_remainder.h b/poincare/include/poincare/division_remainder.h index 5f00ab180..c4ddc367f 100644 --- a/poincare/include/poincare/division_remainder.h +++ b/poincare/include/poincare/division_remainder.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/empty_expression.h b/poincare/include/poincare/empty_expression.h index ad3a3c926..0cf07d8d4 100644 --- a/poincare/include/poincare/empty_expression.h +++ b/poincare/include/poincare/empty_expression.h @@ -17,7 +17,7 @@ public: int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; /* Evaluation */ Evaluation * privateApproximate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } Evaluation * privateApproximate(DoublePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } diff --git a/poincare/include/poincare/equal.h b/poincare/include/poincare/equal.h index 062d527d2..ff4307458 100644 --- a/poincare/include/poincare/equal.h +++ b/poincare/include/poincare/equal.h @@ -19,7 +19,7 @@ private: /* Simplification */ Expression * shallowReduce(Context& context, AngleUnit angleUnit) override; /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, "="); } diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 0836b97d2..d9679fd13 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -248,7 +248,8 @@ public: bool isEqualToItsApproximationLayout(Expression * approximation, int bufferSize, int numberOfSignificantDigits, Context & context); /* Layout Engine */ - ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode = PrintFloat::Mode::Default, ComplexFormat complexFormat = ComplexFormat::Default) const; // Returned object must be deleted + virtual ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const = 0; // Returned object must be deleted + //virtual int writeTextInBuffer(char * buffer, int bufferSize, PrintFloat::Mode floatDisplayMode) const = 0; virtual int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const = 0; /* Simplification */ @@ -315,8 +316,6 @@ private: virtual int simplificationOrderGreaterType(const Expression * e, bool canBeInterrupted) const { return -1; } //TODO: What should be the implementation for complex? virtual int simplificationOrderSameType(const Expression * e, bool canBeInterrupted) const { return 0; } - /* Layout Engine */ - virtual ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const = 0; /* Simplification */ Expression * deepBeautify(Context & context, AngleUnit angleUnit); Expression * deepReduce(Context & context, AngleUnit angleUnit); diff --git a/poincare/include/poincare/factor.h b/poincare/include/poincare/factor.h index bcd10db71..b19cf22d5 100644 --- a/poincare/include/poincare/factor.h +++ b/poincare/include/poincare/factor.h @@ -16,8 +16,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/factorial.h b/poincare/include/poincare/factorial.h index 57a0ee3c4..ede783894 100644 --- a/poincare/include/poincare/factorial.h +++ b/poincare/include/poincare/factorial.h @@ -15,7 +15,7 @@ private: constexpr static int k_maxOperandValue = 100; /* Layout */ bool needParenthesisWithParent(const Expression * e) const override; - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override; /* Simplication */ Expression * shallowReduce(Context& context, AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/floor.h b/poincare/include/poincare/floor.h index d75200aad..84b2071d7 100644 --- a/poincare/include/poincare/floor.h +++ b/poincare/include/poincare/floor.h @@ -14,7 +14,7 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); } diff --git a/poincare/include/poincare/frac_part.h b/poincare/include/poincare/frac_part.h index 55e49c757..11dffa05e 100644 --- a/poincare/include/poincare/frac_part.h +++ b/poincare/include/poincare/frac_part.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/global_context.h b/poincare/include/poincare/global_context.h index 4c847017f..18b928492 100644 --- a/poincare/include/poincare/global_context.h +++ b/poincare/include/poincare/global_context.h @@ -23,7 +23,7 @@ public: /* The expression recorded in global context is already a expression. * Otherwise, we would need the context and the angle unit to evaluate it */ const Expression * expressionForSymbol(const Symbol * symbol) override; - ExpressionLayout * expressionLayoutForSymbol(const Symbol * symbol); + ExpressionLayout * expressionLayoutForSymbol(const Symbol * symbol, int numberOfSignificantDigits); void setExpressionForSymbolName(const Expression * expression, const Symbol * symbol, Context & context) override; static constexpr uint16_t k_maxNumberOfScalarExpressions = 26; static constexpr uint16_t k_maxNumberOfListExpressions = 10; diff --git a/poincare/include/poincare/great_common_divisor.h b/poincare/include/poincare/great_common_divisor.h index cacf2b731..169ffd928 100644 --- a/poincare/include/poincare/great_common_divisor.h +++ b/poincare/include/poincare/great_common_divisor.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/hyperbolic_arc_cosine.h b/poincare/include/poincare/hyperbolic_arc_cosine.h index b222d871d..49b49a57e 100644 --- a/poincare/include/poincare/hyperbolic_arc_cosine.h +++ b/poincare/include/poincare/hyperbolic_arc_cosine.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/hyperbolic_arc_sine.h b/poincare/include/poincare/hyperbolic_arc_sine.h index bd60622b7..df9f73598 100644 --- a/poincare/include/poincare/hyperbolic_arc_sine.h +++ b/poincare/include/poincare/hyperbolic_arc_sine.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/hyperbolic_arc_tangent.h b/poincare/include/poincare/hyperbolic_arc_tangent.h index d5cf6e2c2..76a589fbc 100644 --- a/poincare/include/poincare/hyperbolic_arc_tangent.h +++ b/poincare/include/poincare/hyperbolic_arc_tangent.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/hyperbolic_cosine.h b/poincare/include/poincare/hyperbolic_cosine.h index 176246644..244ab6cd8 100644 --- a/poincare/include/poincare/hyperbolic_cosine.h +++ b/poincare/include/poincare/hyperbolic_cosine.h @@ -15,8 +15,8 @@ public: template static std::complex computeOnComplex(const std::complex c, AngleUnit angleUnit); private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/hyperbolic_sine.h b/poincare/include/poincare/hyperbolic_sine.h index fadfaed5c..e80e76929 100644 --- a/poincare/include/poincare/hyperbolic_sine.h +++ b/poincare/include/poincare/hyperbolic_sine.h @@ -15,8 +15,8 @@ public: template static std::complex computeOnComplex(const std::complex c, AngleUnit angleUnit); private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/hyperbolic_tangent.h b/poincare/include/poincare/hyperbolic_tangent.h index 4ff6408aa..a83306760 100644 --- a/poincare/include/poincare/hyperbolic_tangent.h +++ b/poincare/include/poincare/hyperbolic_tangent.h @@ -15,8 +15,8 @@ public: template static std::complex computeOnComplex(const std::complex c, AngleUnit angleUnit); private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/imaginary_part.h b/poincare/include/poincare/imaginary_part.h index fa663e83e..73bd34999 100644 --- a/poincare/include/poincare/imaginary_part.h +++ b/poincare/include/poincare/imaginary_part.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/integral.h b/poincare/include/poincare/integral.h index 49ff7955a..c21b9b547 100644 --- a/poincare/include/poincare/integral.h +++ b/poincare/include/poincare/integral.h @@ -15,7 +15,7 @@ public: int polynomialDegree(char symbolName) const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, "int"); } diff --git a/poincare/include/poincare/layout_engine.h b/poincare/include/poincare/layout_engine.h index cc6465e66..b210a6722 100644 --- a/poincare/include/poincare/layout_engine.h +++ b/poincare/include/poincare/layout_engine.h @@ -9,8 +9,8 @@ class LayoutEngine { public: /* Expression to ExpressionLayout */ - static ExpressionLayout * createInfixLayout(const Expression * expression, PrintFloat::Mode floatDisplayMode, Expression::ComplexFormat complexFormat, const char * operatorName); - static ExpressionLayout * createPrefixLayout(const Expression * expression, PrintFloat::Mode floatDisplayMode, Expression::ComplexFormat complexFormat, const char * operatorName); + static ExpressionLayout * createInfixLayout(const Expression * expression, PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName); + static ExpressionLayout * createPrefixLayout(const Expression * expression, PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName); /* Create special layouts */ static ExpressionLayout * createParenthesedLayout(ExpressionLayout * layout, bool cloneLayout); diff --git a/poincare/include/poincare/least_common_multiple.h b/poincare/include/poincare/least_common_multiple.h index 31d700a0a..c7990ee01 100644 --- a/poincare/include/poincare/least_common_multiple.h +++ b/poincare/include/poincare/least_common_multiple.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/logarithm.h b/poincare/include/poincare/logarithm.h index 0592db84b..d4f574a00 100644 --- a/poincare/include/poincare/logarithm.h +++ b/poincare/include/poincare/logarithm.h @@ -15,7 +15,7 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, "log"); } diff --git a/poincare/include/poincare/matrix.h b/poincare/include/poincare/matrix.h index 80853de1d..d4919e1d8 100644 --- a/poincare/include/poincare/matrix.h +++ b/poincare/include/poincare/matrix.h @@ -9,7 +9,8 @@ namespace Poincare { class Multiplication; class Matrix : public DynamicHierarchy { - template friend class MatrixComplex; +template friend class MatrixComplex; +friend class GlobalContext; public: Matrix(MatrixData * matrixData); // pilfer the operands of matrixData Matrix(const Expression * const * operands, int numberOfRows, int numberOfColumns, bool cloneOperands = true); @@ -41,7 +42,7 @@ private: // Row canonize the array in place template static void ArrayRowCanonize(T * array, int numberOfRows, int numberOfColumns, T * c = nullptr); /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; /* Evaluation */ Evaluation * privateApproximate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } Evaluation * privateApproximate(DoublePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } diff --git a/poincare/include/poincare/matrix_dimension.h b/poincare/include/poincare/matrix_dimension.h index 404cd138b..13d66bf90 100644 --- a/poincare/include/poincare/matrix_dimension.h +++ b/poincare/include/poincare/matrix_dimension.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/matrix_inverse.h b/poincare/include/poincare/matrix_inverse.h index 1a4e3ed24..4ee0ef882 100644 --- a/poincare/include/poincare/matrix_inverse.h +++ b/poincare/include/poincare/matrix_inverse.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Evaluation */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/matrix_trace.h b/poincare/include/poincare/matrix_trace.h index a5d4b8574..a10abbbd5 100644 --- a/poincare/include/poincare/matrix_trace.h +++ b/poincare/include/poincare/matrix_trace.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/matrix_transpose.h b/poincare/include/poincare/matrix_transpose.h index e80af6ffc..08f582db8 100644 --- a/poincare/include/poincare/matrix_transpose.h +++ b/poincare/include/poincare/matrix_transpose.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/multiplication.h b/poincare/include/poincare/multiplication.h index c37318f0d..03911a58d 100644 --- a/poincare/include/poincare/multiplication.h +++ b/poincare/include/poincare/multiplication.h @@ -36,7 +36,7 @@ private: Expression * setSign(Sign s, Context & context, AngleUnit angleUnit) override; /* Layout */ bool needParenthesisWithParent(const Expression * e) const override; - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override; /* Simplification */ Expression * shallowReduce(Context& context, AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/naperian_logarithm.h b/poincare/include/poincare/naperian_logarithm.h index 3e24ba86e..8177aa51d 100644 --- a/poincare/include/poincare/naperian_logarithm.h +++ b/poincare/include/poincare/naperian_logarithm.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/nth_root.h b/poincare/include/poincare/nth_root.h index 35c5d4501..771287640 100644 --- a/poincare/include/poincare/nth_root.h +++ b/poincare/include/poincare/nth_root.h @@ -13,7 +13,7 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, "root"); } diff --git a/poincare/include/poincare/opposite.h b/poincare/include/poincare/opposite.h index a5b5ad3cd..11e8b6831 100644 --- a/poincare/include/poincare/opposite.h +++ b/poincare/include/poincare/opposite.h @@ -18,7 +18,7 @@ public: private: /* Layout */ bool needParenthesisWithParent(const Expression * e) const override; - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override; /* Simplification */ Expression * shallowReduce(Context& context, AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/parenthesis.h b/poincare/include/poincare/parenthesis.h index c8360ec1a..ab1020590 100644 --- a/poincare/include/poincare/parenthesis.h +++ b/poincare/include/poincare/parenthesis.h @@ -15,7 +15,7 @@ public: int polynomialDegree(char symbolName) const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, ""); } diff --git a/poincare/include/poincare/permute_coefficient.h b/poincare/include/poincare/permute_coefficient.h index 916b96215..0b34b3a92 100644 --- a/poincare/include/poincare/permute_coefficient.h +++ b/poincare/include/poincare/permute_coefficient.h @@ -14,8 +14,8 @@ public: private: constexpr static int k_maxNValue = 100; /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/power.h b/poincare/include/poincare/power.h index dbbeb9967..c109af1e9 100644 --- a/poincare/include/poincare/power.h +++ b/poincare/include/poincare/power.h @@ -30,7 +30,7 @@ private: /* Property */ Expression * setSign(Sign s, Context & context, AngleUnit angleUnit) override; /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; bool needParenthesisWithParent(const Expression * e) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/prediction_interval.h b/poincare/include/poincare/prediction_interval.h index 35d0b859d..d13f141e0 100644 --- a/poincare/include/poincare/prediction_interval.h +++ b/poincare/include/poincare/prediction_interval.h @@ -14,8 +14,8 @@ public: int polynomialDegree(char symbolName) const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/print_float.h b/poincare/include/poincare/print_float.h index 17cbc1951..5c22cd962 100644 --- a/poincare/include/poincare/print_float.h +++ b/poincare/include/poincare/print_float.h @@ -15,7 +15,6 @@ namespace PrintFloat { enum class Mode { Decimal = 0, Scientific = 1, - Default = 2 }; constexpr static int bufferSizeForFloatsWithPrecision(int numberOfSignificantDigits) { // The wors case is -1.234E-38 @@ -53,7 +52,7 @@ namespace PrintFloat { * ConvertFloatToText return the number of characters that have been written * in buffer (excluding the last \O character) */ template - int convertFloatToText(T d, char * buffer, int bufferSize, int numberOfSignificantDigits, Mode mode = Mode::Default); + int convertFloatToText(T d, char * buffer, int bufferSize, int numberOfSignificantDigits, Mode mode); template static int convertFloatToTextPrivate(T f, char * buffer, int numberOfSignificantDigits, Mode mode); } diff --git a/poincare/include/poincare/randint.h b/poincare/include/poincare/randint.h index 7bea9a70f..edebec92d 100644 --- a/poincare/include/poincare/randint.h +++ b/poincare/include/poincare/randint.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/random.h b/poincare/include/poincare/random.h index 355484a97..a0f7eec2c 100644 --- a/poincare/include/poincare/random.h +++ b/poincare/include/poincare/random.h @@ -16,8 +16,8 @@ public: private: Expression * setSign(Sign s, Context & context, AngleUnit angleUnit) override; /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/rational.h b/poincare/include/poincare/rational.h index f7cf70770..47e15dc59 100644 --- a/poincare/include/poincare/rational.h +++ b/poincare/include/poincare/rational.h @@ -43,7 +43,7 @@ public: static int NaturalOrder(const Rational & i, const Rational & j); private: bool needParenthesisWithParent(const Expression * e) const override; - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override; Evaluation * privateApproximate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } Evaluation * privateApproximate(DoublePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } diff --git a/poincare/include/poincare/real_part.h b/poincare/include/poincare/real_part.h index 00fd1b746..f08e0b664 100644 --- a/poincare/include/poincare/real_part.h +++ b/poincare/include/poincare/real_part.h @@ -14,8 +14,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/round.h b/poincare/include/poincare/round.h index 9e50a7659..e4c9344d3 100644 --- a/poincare/include/poincare/round.h +++ b/poincare/include/poincare/round.h @@ -13,8 +13,8 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/sequence.h b/poincare/include/poincare/sequence.h index e2394d689..3eed68bae 100644 --- a/poincare/include/poincare/sequence.h +++ b/poincare/include/poincare/sequence.h @@ -10,7 +10,7 @@ namespace Poincare { class Sequence : public StaticHierarchy<3> { using StaticHierarchy<3>::StaticHierarchy; private: - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); } diff --git a/poincare/include/poincare/simplification_root.h b/poincare/include/poincare/simplification_root.h index d9ae4ef91..d365996dd 100644 --- a/poincare/include/poincare/simplification_root.h +++ b/poincare/include/poincare/simplification_root.h @@ -20,7 +20,7 @@ public: Expression * clone() const override { return nullptr; } int polynomialDegree(char symbolName) const override { return -1; } Type type() const override { return Expression::Type::SimplificationRoot; } - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { return nullptr; } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return 0; } diff --git a/poincare/include/poincare/sine.h b/poincare/include/poincare/sine.h index 5f48208bd..2ec5a6e02 100644 --- a/poincare/include/poincare/sine.h +++ b/poincare/include/poincare/sine.h @@ -20,8 +20,8 @@ public: } private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/square_root.h b/poincare/include/poincare/square_root.h index 540ee7ccf..af955a283 100644 --- a/poincare/include/poincare/square_root.h +++ b/poincare/include/poincare/square_root.h @@ -14,7 +14,7 @@ public: Expression * clone() const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override; /* Simplification */ Expression * shallowReduce(Context& context, AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/store.h b/poincare/include/poincare/store.h index e47f7224e..46afda631 100644 --- a/poincare/include/poincare/store.h +++ b/poincare/include/poincare/store.h @@ -18,7 +18,7 @@ private: /* Simplification */ Expression * shallowReduce(Context& context, AngleUnit angleUnit) override; /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override; /* Evalutation */ Evaluation * privateApproximate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } diff --git a/poincare/include/poincare/subtraction.h b/poincare/include/poincare/subtraction.h index 2bef24a6a..ff370e4d8 100644 --- a/poincare/include/poincare/subtraction.h +++ b/poincare/include/poincare/subtraction.h @@ -17,8 +17,8 @@ public: private: /* Layout */ bool needParenthesisWithParent(const Expression * e) const override; - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createInfixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createInfixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/symbol.h b/poincare/include/poincare/symbol.h index e25850b58..b91dac216 100644 --- a/poincare/include/poincare/symbol.h +++ b/poincare/include/poincare/symbol.h @@ -6,6 +6,7 @@ namespace Poincare { class Symbol : public StaticHierarchy<0> { + friend class Store; public: enum SpecialSymbols : char { /* We can use characters from 1 to 31 as they do not correspond to usual @@ -67,7 +68,7 @@ private: /* Comparison */ int simplificationOrderSameType(const Expression * e, bool canBeInterrupted) const override; /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override; /* Evaluation */ Evaluation * privateApproximate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } diff --git a/poincare/include/poincare/tangent.h b/poincare/include/poincare/tangent.h index 510782bf4..2a72cef23 100644 --- a/poincare/include/poincare/tangent.h +++ b/poincare/include/poincare/tangent.h @@ -16,8 +16,8 @@ public: float characteristicXRange(Context & context, AngleUnit angleUnit = AngleUnit::Default) const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, name()); + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override { + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, name()); } int writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits = PrintFloat::k_numberOfStoredSignificantDigits) const override { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/undefined.h b/poincare/include/poincare/undefined.h index 3c6bfae08..554c00fd9 100644 --- a/poincare/include/poincare/undefined.h +++ b/poincare/include/poincare/undefined.h @@ -14,7 +14,7 @@ public: int polynomialDegree(char symbolName) const override; private: /* Layout */ - ExpressionLayout * privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const override; + ExpressionLayout * createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const override; /* Evaluation */ Evaluation * privateApproximate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } Evaluation * privateApproximate(DoublePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedApproximate(context, angleUnit); } diff --git a/poincare/src/absolute_value.cpp b/poincare/src/absolute_value.cpp index 0023f9317..edce68300 100644 --- a/poincare/src/absolute_value.cpp +++ b/poincare/src/absolute_value.cpp @@ -23,10 +23,8 @@ Expression * AbsoluteValue::setSign(Sign s, Context & context, AngleUnit angleUn return this; } -ExpressionLayout * AbsoluteValue::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); - return new AbsoluteValueLayout(operand(0)->createLayout(floatDisplayMode, complexFormat), false); +ExpressionLayout * AbsoluteValue::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { + return new AbsoluteValueLayout(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } Expression * AbsoluteValue::shallowReduce(Context& context, AngleUnit angleUnit) { diff --git a/poincare/src/binomial_coefficient.cpp b/poincare/src/binomial_coefficient.cpp index 05e2fe5fb..e022571f0 100644 --- a/poincare/src/binomial_coefficient.cpp +++ b/poincare/src/binomial_coefficient.cpp @@ -71,12 +71,10 @@ Expression * BinomialCoefficient::shallowReduce(Context& context, AngleUnit angl return replaceWith(new Rational(result), true); } -ExpressionLayout * BinomialCoefficient::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * BinomialCoefficient::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { return new BinomialCoefficientLayout( - operand(0)->createLayout(floatDisplayMode, complexFormat), - operand(1)->createLayout(floatDisplayMode, complexFormat), + operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), + operand(1)->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } diff --git a/poincare/src/ceiling.cpp b/poincare/src/ceiling.cpp index ee097015a..64ae86443 100644 --- a/poincare/src/ceiling.cpp +++ b/poincare/src/ceiling.cpp @@ -59,10 +59,8 @@ std::complex Ceiling::computeOnComplex(const std::complex c, AngleUnit ang return std::ceil(c.real()); } -ExpressionLayout * Ceiling::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); - return new CeilingLayout(m_operands[0]->createLayout(floatDisplayMode, complexFormat), false); +ExpressionLayout * Ceiling::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { + return new CeilingLayout(m_operands[0]->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } } diff --git a/poincare/src/conjugate.cpp b/poincare/src/conjugate.cpp index b98eee588..00cb0a5b5 100644 --- a/poincare/src/conjugate.cpp +++ b/poincare/src/conjugate.cpp @@ -18,10 +18,8 @@ Expression * Conjugate::clone() const { return a; } -ExpressionLayout * Conjugate::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); - return new ConjugateLayout(operand(0)->createLayout(floatDisplayMode, complexFormat), false); +ExpressionLayout * Conjugate::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { + return new ConjugateLayout(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } Expression * Conjugate::shallowReduce(Context& context, AngleUnit angleUnit) { diff --git a/poincare/src/decimal.cpp b/poincare/src/decimal.cpp index 05c4f7558..40fa392cd 100644 --- a/poincare/src/decimal.cpp +++ b/poincare/src/decimal.cpp @@ -217,7 +217,7 @@ bool Decimal::needParenthesisWithParent(const Expression * e) const { return e->isOfType(types, 7); } -ExpressionLayout * Decimal::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { +ExpressionLayout * Decimal::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { char buffer[k_maxBufferSize]; int numberOfChars = convertToText(buffer, k_maxBufferSize, floatDisplayMode, PrintFloat::k_numberOfStoredSignificantDigits); return LayoutEngine::createStringLayout(buffer, numberOfChars); diff --git a/poincare/src/division.cpp b/poincare/src/division.cpp index 64a1ea120..455278b3c 100644 --- a/poincare/src/division.cpp +++ b/poincare/src/division.cpp @@ -53,12 +53,10 @@ std::complex Division::compute(const std::complex c, const std::complex return c/d; } -ExpressionLayout * Division::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * Division::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { const Expression * numerator = operand(0)->type() == Type::Parenthesis ? operand(0)->operand(0) : operand(0); const Expression * denominator = operand(1)->type() == Type::Parenthesis ? operand(1)->operand(0) : operand(1); - return new FractionLayout(numerator->createLayout(floatDisplayMode, complexFormat), denominator->createLayout(floatDisplayMode, complexFormat), false); + return new FractionLayout(numerator->createLayout(floatDisplayMode, numberOfSignificantDigits), denominator->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } template MatrixComplex Division::computeOnComplexAndMatrix(const std::complex c, const MatrixComplex n) { diff --git a/poincare/src/empty_expression.cpp b/poincare/src/empty_expression.cpp index 4b32ed986..b1f27ade4 100644 --- a/poincare/src/empty_expression.cpp +++ b/poincare/src/empty_expression.cpp @@ -17,7 +17,7 @@ int EmptyExpression::writeTextInBuffer(char * buffer, int bufferSize, int number return LayoutEngine::writeOneCharInBuffer(buffer, bufferSize, Ion::Charset::Empty); } -ExpressionLayout * EmptyExpression::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { +ExpressionLayout * EmptyExpression::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { return new EmptyLayout(); } diff --git a/poincare/src/equal.cpp b/poincare/src/equal.cpp index 84c183450..2c96f675e 100644 --- a/poincare/src/equal.cpp +++ b/poincare/src/equal.cpp @@ -49,13 +49,11 @@ Expression * Equal::shallowReduce(Context& context, AngleUnit angleUnit) { return this; } -ExpressionLayout * Equal::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * Equal::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { HorizontalLayout * result = new HorizontalLayout(); - result->addOrMergeChildAtIndex(operand(0)->createLayout(floatDisplayMode, complexFormat), 0, false); + result->addOrMergeChildAtIndex(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), 0, false); result->addChildAtIndex(new CharLayout('='), result->numberOfChildren()); - result->addOrMergeChildAtIndex(operand(1)->createLayout(floatDisplayMode, complexFormat), result->numberOfChildren(), false); + result->addOrMergeChildAtIndex(operand(1)->createLayout(floatDisplayMode, numberOfSignificantDigits), result->numberOfChildren(), false); return result; } diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index d4e6aadfa..fa92347e0 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -350,27 +350,6 @@ bool Expression::isEqualToItsApproximationLayout(Expression * approximation, int return equal; } -/* Layout */ - -ExpressionLayout * Expression::createLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - switch (floatDisplayMode) { - case PrintFloat::Mode::Default: - switch (complexFormat) { - case ComplexFormat::Default: - return privateCreateLayout(Preferences::sharedPreferences()->displayMode(), Preferences::sharedPreferences()->complexFormat()); - default: - return privateCreateLayout(Preferences::sharedPreferences()->displayMode(), complexFormat); - } - default: - switch (complexFormat) { - case ComplexFormat::Default: - return privateCreateLayout(floatDisplayMode, Preferences::sharedPreferences()->complexFormat()); - default: - return privateCreateLayout(floatDisplayMode, complexFormat); - } - } -} - /* Simplification */ Expression * Expression::ParseAndSimplify(const char * text, Context & context, AngleUnit angleUnit) { diff --git a/poincare/src/factorial.cpp b/poincare/src/factorial.cpp index a39bce388..c3f732814 100644 --- a/poincare/src/factorial.cpp +++ b/poincare/src/factorial.cpp @@ -92,11 +92,9 @@ std::complex Factorial::computeOnComplex(const std::complex c, AngleUnit a return Complex(std::round(result)); } -ExpressionLayout * Factorial::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * Factorial::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { HorizontalLayout * result = new HorizontalLayout(); - result->addOrMergeChildAtIndex(operand(0)->createLayout(floatDisplayMode, complexFormat), 0, false); + result->addOrMergeChildAtIndex(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), 0, false); result->addChildAtIndex(new CharLayout('!'), result->numberOfChildren()); return result; } diff --git a/poincare/src/floor.cpp b/poincare/src/floor.cpp index 08e5300cb..508bd824b 100644 --- a/poincare/src/floor.cpp +++ b/poincare/src/floor.cpp @@ -56,10 +56,8 @@ std::complex Floor::computeOnComplex(const std::complex c, AngleUnit angle return Complex(std::floor(c.real())); } -ExpressionLayout * Floor::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); - return new FloorLayout(m_operands[0]->createLayout(floatDisplayMode, complexFormat), false); +ExpressionLayout * Floor::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { + return new FloorLayout(m_operands[0]->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } } diff --git a/poincare/src/global_context.cpp b/poincare/src/global_context.cpp index 43b7c716d..38b289e4d 100644 --- a/poincare/src/global_context.cpp +++ b/poincare/src/global_context.cpp @@ -78,11 +78,11 @@ const Expression * GlobalContext::expressionForSymbol(const Symbol * symbol) { return m_expressions[index]; } -ExpressionLayout * GlobalContext::expressionLayoutForSymbol(const Symbol * symbol) { +ExpressionLayout * GlobalContext::expressionLayoutForSymbol(const Symbol * symbol, int numberOfSignificantDigits) { if (symbol->isMatrixSymbol()) { int index = symbolIndex(symbol); if (m_matrixLayout[index] == nullptr && m_matrixExpressions[index] != nullptr) { - m_matrixLayout[index] = m_matrixExpressions[index]->createLayout(); + m_matrixLayout[index] = m_matrixExpressions[index]->createLayout(PrintFloat::Mode::Decimal, numberOfSignificantDigits); } return m_matrixLayout[index]; } diff --git a/poincare/src/integral.cpp b/poincare/src/integral.cpp index f9269dcde..4a5b1d134 100644 --- a/poincare/src/integral.cpp +++ b/poincare/src/integral.cpp @@ -66,13 +66,11 @@ Complex * Integral::templatedApproximate(Context & context, AngleUnit angleUn return new Complex(result); } -ExpressionLayout * Integral::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * Integral::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { return new IntegralLayout( - operand(0)->createLayout(floatDisplayMode, complexFormat), - operand(1)->createLayout(floatDisplayMode, complexFormat), - operand(2)->createLayout(floatDisplayMode, complexFormat), + operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), + operand(1)->createLayout(floatDisplayMode, numberOfSignificantDigits), + operand(2)->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } diff --git a/poincare/src/layout_engine.cpp b/poincare/src/layout_engine.cpp index f47ac55d3..4034e8229 100644 --- a/poincare/src/layout_engine.cpp +++ b/poincare/src/layout_engine.cpp @@ -8,27 +8,23 @@ namespace Poincare { -ExpressionLayout * LayoutEngine::createInfixLayout(const Expression * expression, PrintFloat::Mode floatDisplayMode, Expression::ComplexFormat complexFormat, const char * operatorName) { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != Expression::ComplexFormat::Default); +ExpressionLayout * LayoutEngine::createInfixLayout(const Expression * expression, PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName) { int numberOfOperands = expression->numberOfOperands(); assert(numberOfOperands > 1); HorizontalLayout * result = new HorizontalLayout(); - result->addOrMergeChildAtIndex(expression->operand(0)->createLayout(), 0, true); + result->addOrMergeChildAtIndex(expression->operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), 0, true); for (int i = 1; i < numberOfOperands; i++) { result->addOrMergeChildAtIndex(createStringLayout(operatorName, strlen(operatorName)), result->numberOfChildren(), true); result->addOrMergeChildAtIndex( expression->operand(i)->type() == Expression::Type::Opposite ? - createParenthesedLayout(expression->operand(i)->createLayout(floatDisplayMode, complexFormat), false) : - expression->operand(i)->createLayout(floatDisplayMode, complexFormat), + createParenthesedLayout(expression->operand(i)->createLayout(floatDisplayMode, numberOfSignificantDigits), false) : + expression->operand(i)->createLayout(floatDisplayMode, numberOfSignificantDigits), result->numberOfChildren(), true); } return result; } -ExpressionLayout * LayoutEngine::createPrefixLayout(const Expression * expression, PrintFloat::Mode floatDisplayMode, Expression::ComplexFormat complexFormat, const char * operatorName) { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != Expression::ComplexFormat::Default); +ExpressionLayout * LayoutEngine::createPrefixLayout(const Expression * expression, PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits, const char * operatorName) { HorizontalLayout * result = new HorizontalLayout(); // Add the operator name. @@ -40,10 +36,10 @@ ExpressionLayout * LayoutEngine::createPrefixLayout(const Expression * expressio if (numberOfOperands > 0) { args = new HorizontalLayout(); HorizontalLayout * horizontalArgs = static_cast(args); - horizontalArgs->addOrMergeChildAtIndex(expression->operand(0)->createLayout(floatDisplayMode, complexFormat), 0, true); + horizontalArgs->addOrMergeChildAtIndex(expression->operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), 0, true); for (int i = 1; i < numberOfOperands; i++) { horizontalArgs->addChildAtIndex(new CharLayout(','), args->numberOfChildren()); - horizontalArgs->addOrMergeChildAtIndex(expression->operand(i)->createLayout(floatDisplayMode, complexFormat), horizontalArgs->numberOfChildren(), true); + horizontalArgs->addOrMergeChildAtIndex(expression->operand(i)->createLayout(floatDisplayMode, numberOfSignificantDigits), horizontalArgs->numberOfChildren(), true); } } // Add the parenthesed arguments. diff --git a/poincare/src/logarithm.cpp b/poincare/src/logarithm.cpp index 40fb8f9c2..aa71308ce 100644 --- a/poincare/src/logarithm.cpp +++ b/poincare/src/logarithm.cpp @@ -225,13 +225,11 @@ Evaluation * Logarithm::templatedApproximate(Context& context, AngleUnit angl return new Complex(result); } -ExpressionLayout * Logarithm::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * Logarithm::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { if (numberOfOperands() == 1) { - return LayoutEngine::createPrefixLayout(this, floatDisplayMode, complexFormat, "log"); + return LayoutEngine::createPrefixLayout(this, floatDisplayMode, numberOfSignificantDigits, "log"); } - return LayoutEngine::createLogLayout(operand(0)->createLayout(floatDisplayMode, complexFormat), operand(1)->createLayout(floatDisplayMode, complexFormat)); + return LayoutEngine::createLogLayout(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), operand(1)->createLayout(floatDisplayMode, numberOfSignificantDigits)); } } diff --git a/poincare/src/matrix.cpp b/poincare/src/matrix.cpp index e8ad9e4f8..4d2188fc9 100644 --- a/poincare/src/matrix.cpp +++ b/poincare/src/matrix.cpp @@ -215,12 +215,10 @@ void Matrix::ArrayRowCanonize(T * array, int numberOfRows, int numberOfColumns, } } -ExpressionLayout * Matrix::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * Matrix::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { ExpressionLayout ** childrenLayouts = new ExpressionLayout * [numberOfOperands()]; for (int i = 0; i < numberOfOperands(); i++) { - childrenLayouts[i] = operand(i)->createLayout(floatDisplayMode, complexFormat); + childrenLayouts[i] = operand(i)->createLayout(floatDisplayMode, numberOfSignificantDigits); } ExpressionLayout * layout = new MatrixLayout(childrenLayouts, numberOfRows(), numberOfColumns(), false); delete [] childrenLayouts; diff --git a/poincare/src/multiplication.cpp b/poincare/src/multiplication.cpp index ec3edfb49..c00179d00 100644 --- a/poincare/src/multiplication.cpp +++ b/poincare/src/multiplication.cpp @@ -85,9 +85,9 @@ bool Multiplication::needParenthesisWithParent(const Expression * e) const { return e->isOfType(types, 3); } -ExpressionLayout * Multiplication::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { +ExpressionLayout * Multiplication::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { const char middleDotString[] = {Ion::Charset::MiddleDot, 0}; - return LayoutEngine::createInfixLayout(this, floatDisplayMode, complexFormat, middleDotString); + return LayoutEngine::createInfixLayout(this, floatDisplayMode, numberOfSignificantDigits, middleDotString); } int Multiplication::writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits) const { diff --git a/poincare/src/nth_root.cpp b/poincare/src/nth_root.cpp index 22e738dba..7b715b016 100644 --- a/poincare/src/nth_root.cpp +++ b/poincare/src/nth_root.cpp @@ -37,10 +37,8 @@ Expression * NthRoot::shallowReduce(Context& context, AngleUnit angleUnit) { return p->shallowReduce(context, angleUnit); } -ExpressionLayout * NthRoot::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); - return new NthRootLayout(operand(0)->createLayout(floatDisplayMode, complexFormat), operand(1)->createLayout(floatDisplayMode, complexFormat), false); +ExpressionLayout * NthRoot::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { + return new NthRootLayout(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), operand(1)->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } template diff --git a/poincare/src/opposite.cpp b/poincare/src/opposite.cpp index bd8e75ea8..0f69c4096 100644 --- a/poincare/src/opposite.cpp +++ b/poincare/src/opposite.cpp @@ -65,17 +65,14 @@ Expression * Opposite::shallowReduce(Context& context, AngleUnit angleUnit) { return m->shallowReduce(context, angleUnit); } -ExpressionLayout * Opposite::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * Opposite::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { HorizontalLayout * result = new HorizontalLayout(new CharLayout('-'), false); if (operand(0)->type() == Type::Opposite) { - result->addOrMergeChildAtIndex(LayoutEngine::createParenthesedLayout(operand(0)->createLayout(floatDisplayMode, complexFormat), false), 1, false); + result->addOrMergeChildAtIndex(LayoutEngine::createParenthesedLayout(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), false), 1, false); } else { - result->addOrMergeChildAtIndex(operand(0)->createLayout(floatDisplayMode, complexFormat), 1, false); + result->addOrMergeChildAtIndex(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), 1, false); } return result; - } int Opposite::writeTextInBuffer(char * buffer, int bufferSize, int numberOfSignificantDigits) const { diff --git a/poincare/src/parenthesis.cpp b/poincare/src/parenthesis.cpp index cada4ce7c..6a6e089a5 100644 --- a/poincare/src/parenthesis.cpp +++ b/poincare/src/parenthesis.cpp @@ -21,10 +21,8 @@ int Parenthesis::polynomialDegree(char symbolName) const { return operand(0)->polynomialDegree(symbolName); } -ExpressionLayout * Parenthesis::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); - return LayoutEngine::createParenthesedLayout(operand(0)->createLayout(floatDisplayMode, complexFormat), false); +ExpressionLayout * Parenthesis::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { + return LayoutEngine::createParenthesedLayout(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } Expression * Parenthesis::shallowReduce(Context& context, AngleUnit angleUnit) { diff --git a/poincare/src/power.cpp b/poincare/src/power.cpp index 80df1944c..b4e1454ae 100644 --- a/poincare/src/power.cpp +++ b/poincare/src/power.cpp @@ -164,18 +164,16 @@ bool Power::needParenthesisWithParent(const Expression * e) const { return e->isOfType(types, 2); } -ExpressionLayout * Power::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * Power::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { const Expression * indiceOperand = m_operands[1]; // Delete eventual parentheses of the indice in the pretty print if (m_operands[1]->type() == Type::Parenthesis) { indiceOperand = m_operands[1]->operand(0); } HorizontalLayout * result = new HorizontalLayout(); - result->addOrMergeChildAtIndex(m_operands[0]->createLayout(floatDisplayMode, complexFormat), 0, false); + result->addOrMergeChildAtIndex(m_operands[0]->createLayout(floatDisplayMode, numberOfSignificantDigits), 0, false); result->addChildAtIndex(new VerticalOffsetLayout( - indiceOperand->createLayout(floatDisplayMode, complexFormat), + indiceOperand->createLayout(floatDisplayMode, numberOfSignificantDigits), VerticalOffsetLayout::Type::Superscript, false), result->numberOfChildren()); diff --git a/poincare/src/print_float.cpp b/poincare/src/print_float.cpp index db3a299d7..fcad20a73 100644 --- a/poincare/src/print_float.cpp +++ b/poincare/src/print_float.cpp @@ -41,9 +41,6 @@ template int PrintFloat::convertFloatToText(T f, char * buffer, int bufferSize, int numberOfSignificantDigits, Mode mode) { assert(numberOfSignificantDigits > 0); - if (mode == Mode::Default) { - return convertFloatToText(f, buffer, bufferSize, numberOfSignificantDigits, Preferences::sharedPreferences()->displayMode()); - } char tempBuffer[PrintFloat::k_maxFloatBufferLength]; int requiredLength = convertFloatToTextPrivate(f, tempBuffer, numberOfSignificantDigits, mode); /* if the required buffer size overflows the buffer size, we first force the @@ -66,7 +63,6 @@ int PrintFloat::convertFloatToText(T f, char * buffer, int bufferSize, template int PrintFloat::convertFloatToTextPrivate(T f, char * buffer, int numberOfSignificantDigits, Mode mode) { - assert(mode != Mode::Default); assert(numberOfSignificantDigits > 0); /*if (std::isinf(f)) { int currentChar = 0; diff --git a/poincare/src/rational.cpp b/poincare/src/rational.cpp index c5ae52a9c..8fe62359d 100644 --- a/poincare/src/rational.cpp +++ b/poincare/src/rational.cpp @@ -151,7 +151,7 @@ bool Rational::needParenthesisWithParent(const Expression * e) const { return e->isOfType(types, 3); } -ExpressionLayout * Rational::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { +ExpressionLayout * Rational::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { ExpressionLayout * numeratorLayout = m_numerator.createLayout(); if (m_denominator.isOne()) { return numeratorLayout; diff --git a/poincare/src/sequence.cpp b/poincare/src/sequence.cpp index c173c4975..243bce4e4 100644 --- a/poincare/src/sequence.cpp +++ b/poincare/src/sequence.cpp @@ -11,10 +11,8 @@ extern "C" { namespace Poincare { -ExpressionLayout * Sequence::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); - return createSequenceLayoutWithArgumentLayouts(operand(0)->createLayout(floatDisplayMode, complexFormat), operand(1)->createLayout(floatDisplayMode, complexFormat), operand(2)->createLayout(floatDisplayMode, complexFormat)); +ExpressionLayout * Sequence::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { + return createSequenceLayoutWithArgumentLayouts(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), operand(1)->createLayout(floatDisplayMode, numberOfSignificantDigits), operand(2)->createLayout(floatDisplayMode, numberOfSignificantDigits)); } template diff --git a/poincare/src/square_root.cpp b/poincare/src/square_root.cpp index f74e53c03..efb2d1afd 100644 --- a/poincare/src/square_root.cpp +++ b/poincare/src/square_root.cpp @@ -45,10 +45,8 @@ Expression * SquareRoot::shallowReduce(Context& context, AngleUnit angleUnit) { return p->shallowReduce(context, angleUnit); } -ExpressionLayout * SquareRoot::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); - return new NthRootLayout(operand(0)->createLayout(floatDisplayMode, complexFormat), false); +ExpressionLayout * SquareRoot::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { + return new NthRootLayout(operand(0)->createLayout(floatDisplayMode, numberOfSignificantDigits), false); } } diff --git a/poincare/src/store.cpp b/poincare/src/store.cpp index 6a16e3e12..c62d52005 100644 --- a/poincare/src/store.cpp +++ b/poincare/src/store.cpp @@ -33,13 +33,11 @@ Expression * Store::shallowReduce(Context& context, AngleUnit angleUnit) { return replaceWith(editableOperand(1), true)->shallowReduce(context, angleUnit); } -ExpressionLayout * Store::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * Store::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { HorizontalLayout * result = new HorizontalLayout(); - result->addOrMergeChildAtIndex(value()->createLayout(floatDisplayMode, complexFormat), 0, false); + result->addOrMergeChildAtIndex(value()->createLayout(floatDisplayMode, numberOfSignificantDigits), 0, false); result->addChildAtIndex(new CharLayout(Ion::Charset::Sto), result->numberOfChildren()); - result->addOrMergeChildAtIndex(symbol()->createLayout(floatDisplayMode, complexFormat), result->numberOfChildren(), false); + result->addOrMergeChildAtIndex(symbol()->createLayout(floatDisplayMode, numberOfSignificantDigits), result->numberOfChildren(), false); return result; } diff --git a/poincare/src/symbol.cpp b/poincare/src/symbol.cpp index f77466720..807745f1d 100644 --- a/poincare/src/symbol.cpp +++ b/poincare/src/symbol.cpp @@ -243,9 +243,7 @@ char Symbol::name() const { return m_name; } -ExpressionLayout * Symbol::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { - assert(floatDisplayMode != PrintFloat::Mode::Default); - assert(complexFormat != ComplexFormat::Default); +ExpressionLayout * Symbol::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { if (m_name == SpecialSymbols::Ans) { return LayoutEngine::createStringLayout("ans", 3); } diff --git a/poincare/src/undefined.cpp b/poincare/src/undefined.cpp index aefe6c373..f74ff2184 100644 --- a/poincare/src/undefined.cpp +++ b/poincare/src/undefined.cpp @@ -24,7 +24,7 @@ template Complex * Undefined::templatedApproximate(Context& conte return new Complex(Complex::Undefined()); } -ExpressionLayout * Undefined::privateCreateLayout(PrintFloat::Mode floatDisplayMode, ComplexFormat complexFormat) const { +ExpressionLayout * Undefined::createLayout(PrintFloat::Mode floatDisplayMode, int numberOfSignificantDigits) const { char buffer[16]; int numberOfChars = PrintFloat::convertFloatToText(NAN, buffer, 16, 1, floatDisplayMode); return LayoutEngine::createStringLayout(buffer, numberOfChars);