From 3fe7295f6cfaff168ec705dd8d5a057f69f74e23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Wed, 3 Jan 2018 10:48:03 +0100 Subject: [PATCH] [poincare] ExpressionLayoutArray was a method, it is now a class. Change-Id: Iddde7ed9d8a8539193c6547a9e718865ff8e8cc7 --- apps/math_toolbox.cpp | 15 +++++++------- poincare/include/poincare.h | 1 + .../poincare/dynamic_layout_hierarchy.h | 3 ++- poincare/include/poincare/expression_layout.h | 2 -- .../poincare/expression_layout_array.h | 20 +++++++++++++++++++ poincare/src/layout/expression_layout.cpp | 15 -------------- poincare/src/layout/grid_layout.cpp | 2 +- poincare/src/layout/grid_layout.h | 2 +- poincare/src/layout/parenthesis_layout.cpp | 5 +++-- poincare/src/layout/sequence_layout.cpp | 3 ++- .../src/layout/static_layout_hierarchy.cpp | 5 +++-- 11 files changed, 41 insertions(+), 32 deletions(-) create mode 100644 poincare/include/poincare/expression_layout_array.h diff --git a/apps/math_toolbox.cpp b/apps/math_toolbox.cpp index a1b29bf5c..1b569b848 100644 --- a/apps/math_toolbox.cpp +++ b/apps/math_toolbox.cpp @@ -1,5 +1,6 @@ #include "math_toolbox.h" #include "./shared/toolbox_helpers.h" +#include #include #include @@ -17,9 +18,9 @@ const ToolboxMessageTree calculChildren[4] = { ToolboxMessageTree(I18n::Message::IntCommandWithArg, I18n::Message::Integral, I18n::Message::IntCommandWithArg, nullptr, 0, new IntegralLayout( new HorizontalLayout( - const_cast(Poincare::ExpressionLayout::ExpressionLayoutArray2( + Poincare::ExpressionLayoutArray( new EmptyVisibleLayout(), - new StringLayout("dx",2))), 2, false), + new StringLayout("dx",2)).array(), 2, false), new EmptyVisibleLayout(), new EmptyVisibleLayout(), false), @@ -27,10 +28,10 @@ const ToolboxMessageTree calculChildren[4] = { 2), ToolboxMessageTree(I18n::Message::SumCommandWithArg, I18n::Message::Sum, I18n::Message::SumCommandWithArg, nullptr, 0, new SumLayout( - new HorizontalLayout(const_cast(Poincare::ExpressionLayout::ExpressionLayoutArray2( - new StringLayout("n=",2), - new EmptyVisibleLayout())), 2, false), new EmptyVisibleLayout(), + new HorizontalLayout(Poincare::ExpressionLayoutArray( + new StringLayout("n=",2), + new EmptyVisibleLayout()).array(), 2, false), new EmptyVisibleLayout(), false), const_cast(&pointedLayoutPathSum[0]), @@ -54,9 +55,9 @@ const ToolboxMessageTree probabilityChildren[2] = { ToolboxMessageTree(I18n::Message::BinomialCommandWithArg, I18n::Message::Combination, I18n::Message::BinomialCommandWithArg, nullptr, 0, new UneditableHorizontalTrioLayout( new ParenthesisLeftLayout(), - new GridLayout(const_cast(Poincare::ExpressionLayout::ExpressionLayoutArray2( + new GridLayout(Poincare::ExpressionLayoutArray( new EmptyVisibleLayout(), - new EmptyVisibleLayout())), + new EmptyVisibleLayout()).array(), 2, 1, false), new ParenthesisRightLayout(), false, true), const_cast(&pointedLayoutPathBinomial[0]), diff --git a/poincare/include/poincare.h b/poincare/include/poincare.h index 3bd0a9a9b..9c2e8e8f1 100644 --- a/poincare/include/poincare.h +++ b/poincare/include/poincare.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include diff --git a/poincare/include/poincare/dynamic_layout_hierarchy.h b/poincare/include/poincare/dynamic_layout_hierarchy.h index dafe85166..0a7fd488e 100644 --- a/poincare/include/poincare/dynamic_layout_hierarchy.h +++ b/poincare/include/poincare/dynamic_layout_hierarchy.h @@ -2,6 +2,7 @@ #define POINCARE_DYNAMIC_LAYOUT_HIERARCHY_H #include +#include namespace Poincare { @@ -10,7 +11,7 @@ public: DynamicLayoutHierarchy(); DynamicLayoutHierarchy(const ExpressionLayout * const * operands, int numberOfOperands, bool cloneOperands = true); DynamicLayoutHierarchy(const ExpressionLayout * operand1, const ExpressionLayout * operand2, bool cloneOperands = true) : - DynamicLayoutHierarchy(ExpressionLayoutArray2(operand1, operand2), 2, cloneOperands) {} + DynamicLayoutHierarchy(ExpressionLayoutArray(operand1, operand2).array(), 2, cloneOperands) {} ~DynamicLayoutHierarchy(); DynamicLayoutHierarchy(const DynamicLayoutHierarchy & other) = delete; DynamicLayoutHierarchy(DynamicLayoutHierarchy && other) = delete; diff --git a/poincare/include/poincare/expression_layout.h b/poincare/include/poincare/expression_layout.h index f366a305f..8664ed746 100644 --- a/poincare/include/poincare/expression_layout.h +++ b/poincare/include/poincare/expression_layout.h @@ -21,8 +21,6 @@ public: /* Constructor & Destructor */ ExpressionLayout(); virtual ~ExpressionLayout() = default; - static const ExpressionLayout * const * ExpressionLayoutArray2(const ExpressionLayout * e1, const ExpressionLayout * e2); - static const ExpressionLayout * const * ExpressionLayoutArray3(const ExpressionLayout * e1, const ExpressionLayout * e2, const ExpressionLayout * e3); virtual ExpressionLayout * clone() const = 0; /* Rendering */ diff --git a/poincare/include/poincare/expression_layout_array.h b/poincare/include/poincare/expression_layout_array.h new file mode 100644 index 000000000..6bdae090b --- /dev/null +++ b/poincare/include/poincare/expression_layout_array.h @@ -0,0 +1,20 @@ +#ifndef POINCARE_EXPRESSION_LAYOUT_ARRAY_H +#define POINCARE_EXPRESSION_LAYOUT_ARRAY_H + +#include + +namespace Poincare { + +class ExpressionLayoutArray { +public: + ExpressionLayoutArray(const ExpressionLayout * eL1 = nullptr, const ExpressionLayout * eL2 = nullptr, const ExpressionLayout * eL3 = nullptr) : + m_data{eL1, eL2, eL3} + {} + const ExpressionLayout * const * array() { return const_cast(m_data); } +private: + const ExpressionLayout * m_data[3]; +}; + +} + +#endif diff --git a/poincare/src/layout/expression_layout.cpp b/poincare/src/layout/expression_layout.cpp index d4410fb08..797b016c5 100644 --- a/poincare/src/layout/expression_layout.cpp +++ b/poincare/src/layout/expression_layout.cpp @@ -18,21 +18,6 @@ ExpressionLayout::ExpressionLayout() : { } -const ExpressionLayout * const * ExpressionLayout::ExpressionLayoutArray2(const ExpressionLayout * e1, const ExpressionLayout * e2) { - static const ExpressionLayout * result[2] = {nullptr, nullptr}; - result[0] = e1; - result[1] = e2; - return result; -} - -const ExpressionLayout * const * ExpressionLayout::ExpressionLayoutArray3(const ExpressionLayout * e1, const ExpressionLayout * e2, const ExpressionLayout * e3) { - static const ExpressionLayout * result[3] = {nullptr, nullptr, nullptr}; - result[0] = e1; - result[1] = e2; - result[2] = e3; - return result; -} - KDPoint ExpressionLayout::origin() { if (m_parent == nullptr) { return absoluteOrigin(); diff --git a/poincare/src/layout/grid_layout.cpp b/poincare/src/layout/grid_layout.cpp index b73636fc0..2d3152b09 100644 --- a/poincare/src/layout/grid_layout.cpp +++ b/poincare/src/layout/grid_layout.cpp @@ -9,7 +9,7 @@ extern "C" { namespace Poincare { -GridLayout::GridLayout(ExpressionLayout ** entryLayouts, int numberOfRows, int numberOfColumns, bool cloneOperands) : +GridLayout::GridLayout(const ExpressionLayout * const * entryLayouts, int numberOfRows, int numberOfColumns, bool cloneOperands) : DynamicLayoutHierarchy(entryLayouts, numberOfRows*numberOfColumns, cloneOperands), m_numberOfRows(numberOfRows), m_numberOfColumns(numberOfColumns) diff --git a/poincare/src/layout/grid_layout.h b/poincare/src/layout/grid_layout.h index e5a6bde67..a00dcb65d 100644 --- a/poincare/src/layout/grid_layout.h +++ b/poincare/src/layout/grid_layout.h @@ -7,7 +7,7 @@ namespace Poincare { class GridLayout : public DynamicLayoutHierarchy { public: - GridLayout(ExpressionLayout ** entryLayouts, int numberOfRows, int numberOfColumns, bool cloneOperands); + GridLayout(const ExpressionLayout * const * entryLayouts, int numberOfRows, int numberOfColumns, bool cloneOperands); ExpressionLayout * clone() const override; void backspaceAtCursor(ExpressionLayoutCursor * cursor) override; diff --git a/poincare/src/layout/parenthesis_layout.cpp b/poincare/src/layout/parenthesis_layout.cpp index 0f9cbd1fc..cb4c372e1 100644 --- a/poincare/src/layout/parenthesis_layout.cpp +++ b/poincare/src/layout/parenthesis_layout.cpp @@ -1,7 +1,8 @@ #include "parenthesis_layout.h" -#include #include "parenthesis_left_layout.h" #include "parenthesis_right_layout.h" +#include +#include extern "C" { #include #include @@ -14,7 +15,7 @@ ParenthesisLayout::ParenthesisLayout(ExpressionLayout * operand, bool cloneOpera { ExpressionLayout * leftParenthesis = new ParenthesisLeftLayout(); ExpressionLayout * rightParenthesis = new ParenthesisRightLayout(); - build(ExpressionLayout::ExpressionLayoutArray3(leftParenthesis, operand, rightParenthesis), 3, cloneOperands); + build(ExpressionLayoutArray(leftParenthesis, operand, rightParenthesis).array(), 3, cloneOperands); } ExpressionLayout * ParenthesisLayout::clone() const { diff --git a/poincare/src/layout/sequence_layout.cpp b/poincare/src/layout/sequence_layout.cpp index 6b5e9cf85..53842a678 100644 --- a/poincare/src/layout/sequence_layout.cpp +++ b/poincare/src/layout/sequence_layout.cpp @@ -3,6 +3,7 @@ #include "parenthesis_right_layout.h" #include "uneditable_horizontal_trio_layout.h" #include +#include #include #include @@ -14,7 +15,7 @@ SequenceLayout::SequenceLayout(ExpressionLayout * lowerBound, ExpressionLayout * ParenthesisLeftLayout * parLeft = new ParenthesisLeftLayout(); ParenthesisRightLayout * parRight = new ParenthesisRightLayout(); UneditableHorizontalTrioLayout * horLayout = new UneditableHorizontalTrioLayout(parLeft, argument, parRight, cloneOperands, false); - build(const_cast(Poincare::ExpressionLayout::ExpressionLayoutArray3(horLayout, lowerBound, upperBound)), 3, cloneOperands); + build(ExpressionLayoutArray(horLayout, lowerBound, upperBound).array(), 3, cloneOperands); } void SequenceLayout::backspaceAtCursor(ExpressionLayoutCursor * cursor) { diff --git a/poincare/src/layout/static_layout_hierarchy.cpp b/poincare/src/layout/static_layout_hierarchy.cpp index 27d6c68bb..d6d0d0a11 100644 --- a/poincare/src/layout/static_layout_hierarchy.cpp +++ b/poincare/src/layout/static_layout_hierarchy.cpp @@ -1,4 +1,5 @@ #include +#include extern "C" { #include } @@ -27,13 +28,13 @@ StaticLayoutHierarchy<1>::StaticLayoutHierarchy(const ExpressionLayout * e, bool template<> StaticLayoutHierarchy<2>::StaticLayoutHierarchy(const ExpressionLayout * e1, const ExpressionLayout * e2, bool cloneChildren) : - StaticLayoutHierarchy(ExpressionLayoutArray2(e1, e2), cloneChildren) + StaticLayoutHierarchy(ExpressionLayoutArray(e1, e2).array(), cloneChildren) { } template<> StaticLayoutHierarchy<3>::StaticLayoutHierarchy(const ExpressionLayout * e1, const ExpressionLayout * e2, const ExpressionLayout * e3, bool cloneChildren) : - StaticLayoutHierarchy(ExpressionLayoutArray3(e1, e2, e3), cloneChildren) + StaticLayoutHierarchy(ExpressionLayoutArray(e1, e2, e3).array(), cloneChildren) { }