[Sequence & Shared] Changed the location of various files

Moved sequences files to shared in order to allow the system to compile
without the app sequence.

Change-Id: Ia8349814a72776244acc41af964059f24e58cff0
This commit is contained in:
Arthur Camouseigt
2020-07-23 17:41:55 +02:00
committed by Émilie Feral
parent ed358590ce
commit c006ed7b10
33 changed files with 103 additions and 93 deletions

View File

@@ -2,10 +2,7 @@ apps += Sequence::App
app_headers += apps/sequence/app.h app_headers += apps/sequence/app.h
app_sequence_test_src = $(addprefix apps/sequence/,\ app_sequence_test_src = $(addprefix apps/sequence/,\
cache_context.cpp \ \
sequence.cpp \
sequence_context.cpp \
sequence_store.cpp \
) )
app_sequence_src = $(addprefix apps/sequence/,\ app_sequence_src = $(addprefix apps/sequence/,\
@@ -22,7 +19,6 @@ app_sequence_src = $(addprefix apps/sequence/,\
list/type_parameter_controller.cpp \ list/type_parameter_controller.cpp \
values/interval_parameter_controller.cpp \ values/interval_parameter_controller.cpp \
values/values_controller.cpp \ values/values_controller.cpp \
sequence_title_cell.cpp \
) )
app_sequence_src += $(app_sequence_test_src) app_sequence_src += $(app_sequence_test_src)

View File

@@ -64,7 +64,7 @@ App::App(Snapshot * snapshot) :
{ {
} }
SequenceContext * App::localContext() { Shared::SequenceContext * App::localContext() {
return &m_sequenceContext; return &m_sequenceContext;
} }

View File

@@ -2,8 +2,8 @@
#define SEQUENCE_APP_H #define SEQUENCE_APP_H
#include <escher.h> #include <escher.h>
#include "sequence_context.h" #include "../shared/sequence_context.h"
#include "sequence_store.h" #include "../shared/sequence_store.h"
#include "graph/graph_controller.h" #include "graph/graph_controller.h"
#include "graph/curve_view_range.h" #include "graph/curve_view_range.h"
#include "list/list_controller.h" #include "list/list_controller.h"
@@ -27,12 +27,12 @@ public:
App * unpack(Container * container) override; App * unpack(Container * container) override;
void reset() override; void reset() override;
Descriptor * descriptor() override; Descriptor * descriptor() override;
SequenceStore * functionStore() override { return &m_sequenceStore; } Shared::SequenceStore * functionStore() override { return &m_sequenceStore; }
CurveViewRange * graphRange() { return &m_graphRange; } CurveViewRange * graphRange() { return &m_graphRange; }
Shared::Interval * interval() { return &m_interval; } Shared::Interval * interval() { return &m_interval; }
private: private:
void tidy() override; void tidy() override;
SequenceStore m_sequenceStore; Shared::SequenceStore m_sequenceStore;
CurveViewRange m_graphRange; CurveViewRange m_graphRange;
Shared::Interval m_interval; Shared::Interval m_interval;
}; };
@@ -46,8 +46,8 @@ public:
// TODO: override variableBoxForInputEventHandler to lock sequence in the variable box once they appear there // TODO: override variableBoxForInputEventHandler to lock sequence in the variable box once they appear there
// NestedMenuController * variableBoxForInputEventHandler(InputEventHandler * textInput) override; // NestedMenuController * variableBoxForInputEventHandler(InputEventHandler * textInput) override;
CodePoint XNT() override { return 'n'; } CodePoint XNT() override { return 'n'; }
SequenceContext * localContext() override; Shared::SequenceContext * localContext() override;
SequenceStore * functionStore() override { return snapshot()->functionStore(); } Shared::SequenceStore * functionStore() override { return snapshot()->functionStore(); }
Shared::Interval * interval() { return snapshot()->interval(); } Shared::Interval * interval() { return snapshot()->interval(); }
ValuesController * valuesController() override { ValuesController * valuesController() override {
return &m_valuesController; return &m_valuesController;
@@ -57,7 +57,7 @@ public:
} }
private: private:
App(Snapshot * snapshot); App(Snapshot * snapshot);
SequenceContext m_sequenceContext; Shared::SequenceContext m_sequenceContext;
ListController m_listController; ListController m_listController;
ButtonRowController m_listFooter; ButtonRowController m_listFooter;
ButtonRowController m_listHeader; ButtonRowController m_listHeader;

View File

@@ -1,6 +1,7 @@
#include "curve_parameter_controller.h" #include "curve_parameter_controller.h"
#include "graph_controller.h" #include "graph_controller.h"
#include <assert.h> #include <assert.h>
#include <apps/i18n.h>
using namespace Shared; using namespace Shared;

View File

@@ -5,6 +5,7 @@
#include <float.h> #include <float.h>
#include <cmath> #include <cmath>
#include <algorithm> #include <algorithm>
#include <apps/i18n.h>
using namespace Shared; using namespace Shared;
using namespace Poincare; using namespace Poincare;
@@ -38,7 +39,7 @@ float GraphController::interestingXMin() const {
int nmin = INT_MAX; int nmin = INT_MAX;
int nbOfActiveModels = functionStore()->numberOfActiveFunctions(); int nbOfActiveModels = functionStore()->numberOfActiveFunctions();
for (int i = 0; i < nbOfActiveModels; i++) { for (int i = 0; i < nbOfActiveModels; i++) {
Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(i)); Shared::Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(i));
nmin = std::min(nmin, s->initialRank()); nmin = std::min(nmin, s->initialRank());
} }
assert(nmin < INT_MAX); assert(nmin < INT_MAX);
@@ -50,7 +51,7 @@ void GraphController::interestingRanges(InteractiveCurveViewRange * range) const
int nmax = 0; int nmax = 0;
int nbOfActiveModels = functionStore()->numberOfActiveFunctions(); int nbOfActiveModels = functionStore()->numberOfActiveFunctions();
for (int i = 0; i < nbOfActiveModels; i++) { for (int i = 0; i < nbOfActiveModels; i++) {
Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(i)); Shared::Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(i));
int firstInterestingIndex = s->initialRank(); int firstInterestingIndex = s->initialRank();
nmin = std::min(nmin, firstInterestingIndex); nmin = std::min(nmin, firstInterestingIndex);
nmax = std::max(nmax, firstInterestingIndex + static_cast<int>(k_defaultXHalfRange)); nmax = std::max(nmax, firstInterestingIndex + static_cast<int>(k_defaultXHalfRange));
@@ -95,7 +96,7 @@ bool GraphController::moveCursorHorizontally(int direction, int scrollSpeed) {
if (x < 0.0) { if (x < 0.0) {
return false; return false;
} }
Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(indexFunctionSelectedByCursor())); Shared::Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(indexFunctionSelectedByCursor()));
double y = s->evaluateXYAtParameter(x, textFieldDelegateApp()->localContext()).x2(); double y = s->evaluateXYAtParameter(x, textFieldDelegateApp()->localContext()).x2();
m_cursor->moveTo(x, x, y); m_cursor->moveTo(x, x, y);
return true; return true;

View File

@@ -8,13 +8,13 @@
#include "term_sum_controller.h" #include "term_sum_controller.h"
#include "../../shared/function_graph_controller.h" #include "../../shared/function_graph_controller.h"
#include "../../shared/cursor_view.h" #include "../../shared/cursor_view.h"
#include "../sequence_store.h" #include "../../shared/sequence_store.h"
namespace Sequence { namespace Sequence {
class GraphController final : public Shared::FunctionGraphController { class GraphController final : public Shared::FunctionGraphController {
public: public:
GraphController(Responder * parentResponder, ::InputEventHandlerDelegate * inputEventHandlerDelegate, SequenceStore * sequenceStore, CurveViewRange * graphRange, Shared::CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * previousModelsVersions, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header); GraphController(Responder * parentResponder, ::InputEventHandlerDelegate * inputEventHandlerDelegate, Shared::SequenceStore * sequenceStore, CurveViewRange * graphRange, Shared::CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * previousModelsVersions, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header);
I18n::Message emptyMessage() override; I18n::Message emptyMessage() override;
void viewWillAppear() override; void viewWillAppear() override;
TermSumController * termSumController() { return &m_termSumController; } TermSumController * termSumController() { return &m_termSumController; }
@@ -28,7 +28,7 @@ private:
bool moveCursorHorizontally(int direction, int scrollSpeed = 1) override; bool moveCursorHorizontally(int direction, int scrollSpeed = 1) override;
double defaultCursorT(Ion::Storage::Record record) override; double defaultCursorT(Ion::Storage::Record record) override;
CurveViewRange * interactiveCurveViewRange() override { return m_graphRange; } CurveViewRange * interactiveCurveViewRange() override { return m_graphRange; }
SequenceStore * functionStore() const override { return static_cast<SequenceStore *>(Shared::FunctionGraphController::functionStore()); } Shared::SequenceStore * functionStore() const override { return static_cast<Shared::SequenceStore *>(Shared::FunctionGraphController::functionStore()); }
GraphView * functionGraphView() override { return &m_view; } GraphView * functionGraphView() override { return &m_view; }
CurveParameterController * curveParameterController() override { return &m_curveParameterController; } CurveParameterController * curveParameterController() override { return &m_curveParameterController; }
Shared::CursorView m_cursorView; Shared::CursorView m_cursorView;

View File

@@ -19,7 +19,7 @@ void GraphView::drawRect(KDContext * ctx, KDRect rect) const {
const int step = std::ceil(pixelWidth()); const int step = std::ceil(pixelWidth());
for (int i = 0; i < m_sequenceStore->numberOfActiveFunctions(); i++) { for (int i = 0; i < m_sequenceStore->numberOfActiveFunctions(); i++) {
Ion::Storage::Record record = m_sequenceStore->activeRecordAtIndex(i); Ion::Storage::Record record = m_sequenceStore->activeRecordAtIndex(i);
Sequence * s = m_sequenceStore->modelForRecord(record);; Shared::Sequence * s = m_sequenceStore->modelForRecord(record);;
float rectXMin = pixelToFloat(Axis::Horizontal, rect.left() - k_externRectMargin); float rectXMin = pixelToFloat(Axis::Horizontal, rect.left() - k_externRectMargin);
rectXMin = rectXMin < 0 ? 0 : rectXMin; rectXMin = rectXMin < 0 ? 0 : rectXMin;
float rectXMax = pixelToFloat(Axis::Horizontal, rect.right() + k_externRectMargin); float rectXMax = pixelToFloat(Axis::Horizontal, rect.right() + k_externRectMargin);

View File

@@ -2,17 +2,17 @@
#define SEQUENCE_GRAPH_VIEW_H #define SEQUENCE_GRAPH_VIEW_H
#include "../../shared/function_graph_view.h" #include "../../shared/function_graph_view.h"
#include "../sequence_store.h" #include "../../shared/sequence_store.h"
namespace Sequence { namespace Sequence {
class GraphView : public Shared::FunctionGraphView { class GraphView : public Shared::FunctionGraphView {
public: public:
GraphView(SequenceStore * sequenceStore, Shared::InteractiveCurveViewRange * graphRange, GraphView(Shared::SequenceStore * sequenceStore, Shared::InteractiveCurveViewRange * graphRange,
Shared::CurveViewCursor * cursor, Shared::BannerView * bannerView, Shared::CursorView * cursorView); Shared::CurveViewCursor * cursor, Shared::BannerView * bannerView, Shared::CursorView * cursorView);
void drawRect(KDContext * ctx, KDRect rect) const override; void drawRect(KDContext * ctx, KDRect rect) const override;
private: private:
SequenceStore * m_sequenceStore; Shared::SequenceStore * m_sequenceStore;
}; };
} }

View File

@@ -49,7 +49,7 @@ double TermSumController::cursorNextStep(double x, int direction) {
} }
Layout TermSumController::createFunctionLayout(Shared::ExpiringPointer<Shared::Function> function) { Layout TermSumController::createFunctionLayout(Shared::ExpiringPointer<Shared::Function> function) {
Sequence * sequence = static_cast<Sequence *>(function.pointer()); Shared::Sequence * sequence = static_cast<Shared::Sequence *>(function.pointer());
return sequence->nameLayout(); return sequence->nameLayout();
} }

View File

@@ -2,6 +2,7 @@
#include "../app.h" #include "../app.h"
#include <assert.h> #include <assert.h>
#include <algorithm> #include <algorithm>
#include <apps/i18n.h>
using namespace Shared; using namespace Shared;
using namespace Poincare; using namespace Poincare;
@@ -31,7 +32,7 @@ int ListController::numberOfExpressionRows() const {
SequenceStore * store = const_cast<ListController *>(this)->modelStore(); SequenceStore * store = const_cast<ListController *>(this)->modelStore();
const int modelsCount = store->numberOfModels(); const int modelsCount = store->numberOfModels();
for (int i = 0; i < modelsCount; i++) { for (int i = 0; i < modelsCount; i++) {
Sequence * sequence = store->modelForRecord(store->recordAtIndex(i)); Shared::Sequence * sequence = store->modelForRecord(store->recordAtIndex(i));
numberOfRows += sequence->numberOfElements(); numberOfRows += sequence->numberOfElements();
} }
return numberOfRows + (modelsCount == store->maxNumberOfModels()? 0 : 1); return numberOfRows + (modelsCount == store->maxNumberOfModels()? 0 : 1);
@@ -42,7 +43,7 @@ KDCoordinate ListController::expressionRowHeight(int j) {
if (isAddEmptyRow(j)) { if (isAddEmptyRow(j)) {
return defaultHeight; return defaultHeight;
} }
Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(modelIndexForRow(j))); Shared::Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(modelIndexForRow(j)));
Layout layout = sequence->layout(); Layout layout = sequence->layout();
if (sequenceDefinitionForRow(j) == 1) { if (sequenceDefinitionForRow(j) == 1) {
layout = sequence->firstInitialConditionLayout(); layout = sequence->firstInitialConditionLayout();
@@ -67,7 +68,7 @@ Toolbox * ListController::toolboxForInputEventHandler(InputEventHandler * textIn
// Set extra cells // Set extra cells
int recurrenceDepth = -1; int recurrenceDepth = -1;
int sequenceDefinition = sequenceDefinitionForRow(selectedRow()); int sequenceDefinition = sequenceDefinitionForRow(selectedRow());
Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(modelIndexForRow(selectedRow()))); Shared::Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(modelIndexForRow(selectedRow())));
if (sequenceDefinition == 0) { if (sequenceDefinition == 0) {
recurrenceDepth = sequence->numberOfElements()-1; recurrenceDepth = sequence->numberOfElements()-1;
} }
@@ -85,7 +86,7 @@ void ListController::selectPreviousNewSequenceCell() {
void ListController::editExpression(int sequenceDefinition, Ion::Events::Event event) { void ListController::editExpression(int sequenceDefinition, Ion::Events::Event event) {
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(selectedRow())); Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(selectedRow()));
Sequence * sequence = modelStore()->modelForRecord(record); Shared::Sequence * sequence = modelStore()->modelForRecord(record);
InputViewController * inputController = Shared::FunctionApp::app()->inputViewController(); InputViewController * inputController = Shared::FunctionApp::app()->inputViewController();
if (event == Ion::Events::OK || event == Ion::Events::EXE) { if (event == Ion::Events::OK || event == Ion::Events::EXE) {
char initialTextContent[Constant::MaxSerializedExpressionSize]; char initialTextContent[Constant::MaxSerializedExpressionSize];
@@ -147,7 +148,7 @@ bool ListController::editInitialConditionOfSelectedRecordWithText(const char * t
// Reset memoization of the selected cell which always corresponds to the k_memoizedCellsCount/2 memoized cell // Reset memoization of the selected cell which always corresponds to the k_memoizedCellsCount/2 memoized cell
resetMemoizationForIndex(k_memoizedCellsCount/2); resetMemoizationForIndex(k_memoizedCellsCount/2);
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(selectedRow())); Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(selectedRow()));
Sequence * sequence = modelStore()->modelForRecord(record); Shared::Sequence * sequence = modelStore()->modelForRecord(record);
Context * context = App::app()->localContext(); Context * context = App::app()->localContext();
Ion::Storage::Record::ErrorStatus error = firstInitialCondition? sequence->setFirstInitialConditionContent(text, context) : sequence->setSecondInitialConditionContent(text, context); Ion::Storage::Record::ErrorStatus error = firstInitialCondition? sequence->setFirstInitialConditionContent(text, context) : sequence->setSecondInitialConditionContent(text, context);
return (error == Ion::Storage::Record::ErrorStatus::None); return (error == Ion::Storage::Record::ErrorStatus::None);
@@ -179,7 +180,7 @@ void ListController::willDisplayTitleCellAtIndex(HighlightCell * cell, int j) {
myCell->setBaseline(baseline(j)); myCell->setBaseline(baseline(j));
// Set the layout // Set the layout
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(j)); Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(j));
Sequence * sequence = modelStore()->modelForRecord(record); Shared::Sequence * sequence = modelStore()->modelForRecord(record);
if (sequenceDefinitionForRow(j) == 0) { if (sequenceDefinitionForRow(j) == 0) {
myCell->setLayout(sequence->definitionName()); myCell->setLayout(sequence->definitionName());
} }
@@ -197,7 +198,7 @@ void ListController::willDisplayTitleCellAtIndex(HighlightCell * cell, int j) {
void ListController::willDisplayExpressionCellAtIndex(HighlightCell * cell, int j) { void ListController::willDisplayExpressionCellAtIndex(HighlightCell * cell, int j) {
FunctionExpressionCell * myCell = (FunctionExpressionCell *)cell; FunctionExpressionCell * myCell = (FunctionExpressionCell *)cell;
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(j)); Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(j));
Sequence * sequence = modelStore()->modelForRecord(record); Shared::Sequence * sequence = modelStore()->modelForRecord(record);
if (sequenceDefinitionForRow(j) == 0) { if (sequenceDefinitionForRow(j) == 0) {
myCell->setLayout(sequence->layout()); myCell->setLayout(sequence->layout());
} }
@@ -223,7 +224,7 @@ int ListController::modelIndexForRow(int j) {
int sequenceIndex = -1; int sequenceIndex = -1;
do { do {
sequenceIndex++; sequenceIndex++;
Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(sequenceIndex)); Shared::Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(sequenceIndex));
rowIndex += sequence->numberOfElements(); rowIndex += sequence->numberOfElements();
} while (rowIndex <= j); } while (rowIndex <= j);
return sequenceIndex; return sequenceIndex;
@@ -238,7 +239,7 @@ int ListController::sequenceDefinitionForRow(int j) {
} }
int rowIndex = 0; int rowIndex = 0;
int sequenceIndex = -1; int sequenceIndex = -1;
Sequence * sequence; Shared::Sequence * sequence;
do { do {
sequenceIndex++; sequenceIndex++;
sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(sequenceIndex)); sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(sequenceIndex));
@@ -259,7 +260,7 @@ void ListController::editExpression(Ion::Events::Event event) {
void ListController::reinitSelectedExpression(ExpiringPointer<ExpressionModelHandle> model) { void ListController::reinitSelectedExpression(ExpiringPointer<ExpressionModelHandle> model) {
// Invalidate the sequences context cache // Invalidate the sequences context cache
App::app()->localContext()->resetCache(); App::app()->localContext()->resetCache();
Sequence * sequence = static_cast<Sequence *>(model.pointer()); Shared::Sequence * sequence = static_cast<Shared::Sequence *>(model.pointer());
switch (sequenceDefinitionForRow(selectedRow())) { switch (sequenceDefinitionForRow(selectedRow())) {
case 1: case 1:
if (sequence->firstInitialConditionExpressionClone().isUninitialized()) { if (sequence->firstInitialConditionExpressionClone().isUninitialized()) {

View File

@@ -2,8 +2,8 @@
#define SEQUENCE_LIST_CONTROLLER_H #define SEQUENCE_LIST_CONTROLLER_H
#include <escher.h> #include <escher.h>
#include "../sequence_title_cell.h" #include "../../shared/sequence_title_cell.h"
#include "../sequence_store.h" #include "../../shared/sequence_store.h"
#include "../../shared/function_expression_cell.h" #include "../../shared/function_expression_cell.h"
#include "../../shared/function_list_controller.h" #include "../../shared/function_list_controller.h"
#include "../../shared/input_event_handler_delegate.h" #include "../../shared/input_event_handler_delegate.h"
@@ -40,9 +40,9 @@ private:
void reinitSelectedExpression(Shared::ExpiringPointer<Shared::ExpressionModelHandle> model) override; void reinitSelectedExpression(Shared::ExpiringPointer<Shared::ExpressionModelHandle> model) override;
void editExpression(Ion::Events::Event event) override; void editExpression(Ion::Events::Event event) override;
bool removeModelRow(Ion::Storage::Record record) override; bool removeModelRow(Ion::Storage::Record record) override;
SequenceStore * modelStore() override; Shared::SequenceStore * modelStore() override;
constexpr static int k_maxNumberOfRows = 3*MaxNumberOfSequences; constexpr static int k_maxNumberOfRows = 3*Shared::MaxNumberOfSequences;
SequenceTitleCell m_sequenceTitleCells[k_maxNumberOfRows]; Shared::SequenceTitleCell m_sequenceTitleCells[k_maxNumberOfRows];
Shared::FunctionExpressionCell m_expressionCells[k_maxNumberOfRows]; Shared::FunctionExpressionCell m_expressionCells[k_maxNumberOfRows];
ListParameterController m_parameterController; ListParameterController m_parameterController;
TypeParameterController m_typeParameterController; TypeParameterController m_typeParameterController;

View File

@@ -2,6 +2,7 @@
#include "list_controller.h" #include "list_controller.h"
#include "../app.h" #include "../app.h"
#include "../../shared/poincare_helpers.h" #include "../../shared/poincare_helpers.h"
#include <apps/i18n.h>
using namespace Poincare; using namespace Poincare;
using namespace Shared; using namespace Shared;
@@ -67,7 +68,7 @@ bool ListParameterController::textFieldShouldFinishEditing(TextField * textField
} }
bool ListParameterController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) { bool ListParameterController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {
static float maxFirstIndex = std::pow(10.0f, Sequence::k_initialRankNumberOfDigits) - 1.0f; static float maxFirstIndex = std::pow(10.0f, Shared::Sequence::k_initialRankNumberOfDigits) - 1.0f;
/* -1 to take into account a double recursive sequence, which has /* -1 to take into account a double recursive sequence, which has
* SecondIndex = FirstIndex + 1 */ * SecondIndex = FirstIndex + 1 */
double floatBody; double floatBody;
@@ -141,8 +142,8 @@ void ListParameterController::willDisplayCellForIndex(HighlightCell * cell, int
if (myCell->isEditing()) { if (myCell->isEditing()) {
return; return;
} }
char buffer[Sequence::k_initialRankNumberOfDigits+1]; char buffer[Shared::Sequence::k_initialRankNumberOfDigits+1];
Poincare::Integer(sequence()->initialRank()).serialize(buffer, Sequence::k_initialRankNumberOfDigits+1); Poincare::Integer(sequence()->initialRank()).serialize(buffer, Shared::Sequence::k_initialRankNumberOfDigits+1);
myCell->setAccessoryText(buffer); myCell->setAccessoryText(buffer);
} }
} }
@@ -155,7 +156,7 @@ int ListParameterController::totalNumberOfCells() const {
}; };
bool ListParameterController::hasInitialRankRow() const { bool ListParameterController::hasInitialRankRow() const {
return !m_record.isNull() && const_cast<ListParameterController *>(this)->sequence()->type() != Sequence::Type::Explicit; return !m_record.isNull() && const_cast<ListParameterController *>(this)->sequence()->type() != Shared::Sequence::Type::Explicit;
} }
} }

View File

@@ -3,8 +3,8 @@
#include "../../shared/list_parameter_controller.h" #include "../../shared/list_parameter_controller.h"
#include "../../shared/parameter_text_field_delegate.h" #include "../../shared/parameter_text_field_delegate.h"
#include "../sequence.h" #include "../../shared/sequence.h"
#include "../sequence_store.h" #include "../../shared/sequence_store.h"
#include "type_parameter_controller.h" #include "type_parameter_controller.h"
namespace Sequence { namespace Sequence {
@@ -31,7 +31,7 @@ private:
constexpr static int k_totalNumberOfCell = 4; constexpr static int k_totalNumberOfCell = 4;
#endif #endif
int totalNumberOfCells() const override; int totalNumberOfCells() const override;
Sequence * sequence() { return static_cast<Sequence *>(function().pointer()); } Shared::Sequence * sequence() { return static_cast<Shared::Sequence *>(function().pointer()); }
bool hasInitialRankRow() const; bool hasInitialRankRow() const;
MessageTableCellWithChevronAndExpression m_typeCell; MessageTableCellWithChevronAndExpression m_typeCell;
MessageTableCellWithEditableText m_initialRankCell; MessageTableCellWithEditableText m_initialRankCell;

View File

@@ -1,5 +1,5 @@
#include "sequence_toolbox.h" #include "sequence_toolbox.h"
#include "../sequence_store.h" #include "../../shared/sequence_store.h"
#include <poincare/layout_helper.h> #include <poincare/layout_helper.h>
#include <assert.h> #include <assert.h>
#include <poincare/code_point_layout.h> #include <poincare/code_point_layout.h>
@@ -75,8 +75,8 @@ void SequenceToolbox::buildExtraCellsLayouts(const char * sequenceName, int recu
* There is a special case for double recurrent sequences because we do not * There is a special case for double recurrent sequences because we do not
* want to parse symbols u(n+2), v(n+2) or w(n+2). */ * want to parse symbols u(n+2), v(n+2) or w(n+2). */
m_numberOfAddedCells = 0; m_numberOfAddedCells = 0;
int sequenceIndex = SequenceStore::sequenceIndexForName(sequenceName[0]); int sequenceIndex = Shared::SequenceStore::sequenceIndexForName(sequenceName[0]);
for (int i = 0; i < MaxNumberOfSequences; i++) { for (int i = 0; i < Shared::MaxNumberOfSequences; i++) {
for (int j = 0; j < recurrenceDepth+1; j++) { for (int j = 0; j < recurrenceDepth+1; j++) {
// When defining u(n+1) for ex, don't add [u|v|w](n+2) or u(n+1) // When defining u(n+1) for ex, don't add [u|v|w](n+2) or u(n+1)
if (j == 2 || (j == recurrenceDepth && sequenceIndex == i)) { if (j == 2 || (j == recurrenceDepth && sequenceIndex == i)) {
@@ -84,7 +84,7 @@ void SequenceToolbox::buildExtraCellsLayouts(const char * sequenceName, int recu
} }
const char * indice = j == 0 ? "n" : "n+1"; const char * indice = j == 0 ? "n" : "n+1";
m_addedCellLayout[m_numberOfAddedCells++] = HorizontalLayout::Builder( m_addedCellLayout[m_numberOfAddedCells++] = HorizontalLayout::Builder(
CodePointLayout::Builder(SequenceStore::k_sequenceNames[i][0], KDFont::LargeFont), CodePointLayout::Builder(Shared::SequenceStore::k_sequenceNames[i][0], KDFont::LargeFont),
VerticalOffsetLayout::Builder(LayoutHelper::String(indice, strlen(indice), KDFont::LargeFont), VerticalOffsetLayoutNode::Position::Subscript) VerticalOffsetLayout::Builder(LayoutHelper::String(indice, strlen(indice), KDFont::LargeFont), VerticalOffsetLayoutNode::Position::Subscript)
); );
} }

View File

@@ -5,6 +5,7 @@
#include <poincare/layout_helper.h> #include <poincare/layout_helper.h>
#include <poincare/code_point_layout.h> #include <poincare/code_point_layout.h>
#include <poincare/vertical_offset_layout.h> #include <poincare/vertical_offset_layout.h>
#include <apps/i18n.h>
using namespace Poincare; using namespace Poincare;
using namespace Shared; using namespace Shared;
@@ -55,14 +56,14 @@ void TypeParameterController::didBecomeFirstResponder() {
bool TypeParameterController::handleEvent(Ion::Events::Event event) { bool TypeParameterController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::OK || event == Ion::Events::EXE) { if (event == Ion::Events::OK || event == Ion::Events::EXE) {
if (!m_record.isNull()) { if (!m_record.isNull()) {
Sequence::Type sequenceType = (Sequence::Type)selectedRow(); Shared::Sequence::Type sequenceType = (Shared::Sequence::Type)selectedRow();
if (sequence()->type() != sequenceType) { if (sequence()->type() != sequenceType) {
m_listController->selectPreviousNewSequenceCell(); m_listController->selectPreviousNewSequenceCell();
sequence()->setType(sequenceType); sequence()->setType(sequenceType);
// Invalidate sequence context cache when changing sequence type // Invalidate sequence context cache when changing sequence type
App::app()->localContext()->resetCache(); App::app()->localContext()->resetCache();
// Reset the first index if the new type is "Explicit" // Reset the first index if the new type is "Explicit"
if (sequenceType == Sequence::Type::Explicit) { if (sequenceType == Shared::Sequence::Type::Explicit) {
sequence()->setInitialRank(0); sequence()->setInitialRank(0);
} }
} }
@@ -79,8 +80,8 @@ bool TypeParameterController::handleEvent(Ion::Events::Event event) {
} }
assert(error == Ion::Storage::Record::ErrorStatus::None); assert(error == Ion::Storage::Record::ErrorStatus::None);
Ion::Storage::Record record = sequenceStore()->recordAtIndex(sequenceStore()->numberOfModels()-1); Ion::Storage::Record record = sequenceStore()->recordAtIndex(sequenceStore()->numberOfModels()-1);
Sequence * newSequence = sequenceStore()->modelForRecord(record); Shared::Sequence * newSequence = sequenceStore()->modelForRecord(record);
newSequence->setType((Sequence::Type)selectedRow()); newSequence->setType((Shared::Sequence::Type)selectedRow());
Container::activeApp()->dismissModalViewController(); Container::activeApp()->dismissModalViewController();
m_listController->editExpression(0, Ion::Events::OK); m_listController->editExpression(0, Ion::Events::OK);
return true; return true;

View File

@@ -3,7 +3,7 @@
#include <escher.h> #include <escher.h>
#include <poincare/layout.h> #include <poincare/layout.h>
#include "../sequence_store.h" #include "../../shared/sequence_store.h"
namespace Sequence { namespace Sequence {
@@ -28,11 +28,11 @@ public:
void setRecord(Ion::Storage::Record record); void setRecord(Ion::Storage::Record record);
private: private:
StackViewController * stackController() const; StackViewController * stackController() const;
Sequence * sequence() { Shared::Sequence * sequence() {
assert(!m_record.isNull()); assert(!m_record.isNull());
return sequenceStore()->modelForRecord(m_record); return sequenceStore()->modelForRecord(m_record);
} }
SequenceStore * sequenceStore(); Shared::SequenceStore * sequenceStore();
constexpr static int k_totalNumberOfCell = 3; constexpr static int k_totalNumberOfCell = 3;
ExpressionTableCellWithPointer m_explicitCell; ExpressionTableCellWithPointer m_explicitCell;
ExpressionTableCellWithPointer m_singleRecurrenceCell; ExpressionTableCellWithPointer m_singleRecurrenceCell;

View File

@@ -3,14 +3,13 @@
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>
#include <cmath> #include <cmath>
#include "../sequence_store.h" #include "../../shared/sequence_store.h"
#include "../sequence_context.h" #include "../../shared/sequence_context.h"
#include "../../shared/poincare_helpers.h" #include "../../shared/poincare_helpers.h"
using namespace Poincare; using namespace Poincare;
using namespace Shared;
namespace Sequence { namespace Shared {
Sequence * addSequence(SequenceStore * store, Sequence::Type type, const char * definition, const char * condition1, const char * condition2, Context * context) { Sequence * addSequence(SequenceStore * store, Sequence::Type type, const char * definition, const char * condition1, const char * condition2, Context * context) {
Ion::Storage::Record::ErrorStatus err = store->addEmptyModel(); Ion::Storage::Record::ErrorStatus err = store->addEmptyModel();

View File

@@ -3,6 +3,7 @@
#include <cmath> #include <cmath>
#include "../../shared/poincare_helpers.h" #include "../../shared/poincare_helpers.h"
#include "../app.h" #include "../app.h"
#include <apps/i18n.h>
using namespace Poincare; using namespace Poincare;
@@ -51,8 +52,8 @@ void ValuesController::willDisplayCellAtLocation(HighlightCell * cell, int i, in
return; return;
} }
if (typeAtLocation(i,j) == k_functionTitleCellType) { if (typeAtLocation(i,j) == k_functionTitleCellType) {
SequenceTitleCell * myCell = (SequenceTitleCell *)cell; Shared::SequenceTitleCell * myCell = (Shared::SequenceTitleCell *)cell;
Sequence * sequence = functionStore()->modelForRecord(recordAtColumn(i)); Shared::Sequence * sequence = functionStore()->modelForRecord(recordAtColumn(i));
myCell->setLayout(sequence->nameLayout()); myCell->setLayout(sequence->nameLayout());
myCell->setColor(sequence->color()); myCell->setColor(sequence->color());
} }
@@ -95,7 +96,7 @@ Shared::Interval * ValuesController::intervalAtColumn(int columnIndex) {
void ValuesController::fillMemoizedBuffer(int column, int row, int index) { void ValuesController::fillMemoizedBuffer(int column, int row, int index) {
char * buffer = memoizedBufferAtIndex(index); char * buffer = memoizedBufferAtIndex(index);
double abscissa = intervalAtColumn(column)->element(row-1); // Subtract the title row from row to get the element index double abscissa = intervalAtColumn(column)->element(row-1); // Subtract the title row from row to get the element index
Shared::ExpiringPointer<Sequence> sequence = functionStore()->modelForRecord(recordAtColumn(column)); Shared::ExpiringPointer<Shared::Sequence> sequence = functionStore()->modelForRecord(recordAtColumn(column));
Coordinate2D<double> xy = sequence->evaluateXYAtParameter(abscissa, textFieldDelegateApp()->localContext()); Coordinate2D<double> xy = sequence->evaluateXYAtParameter(abscissa, textFieldDelegateApp()->localContext());
Shared::PoincareHelpers::ConvertFloatToText<double>(xy.x2(), buffer, k_valuesCellBufferSize, Preferences::LargeNumberOfSignificantDigits); Shared::PoincareHelpers::ConvertFloatToText<double>(xy.x2(), buffer, k_valuesCellBufferSize, Preferences::LargeNumberOfSignificantDigits);
} }

View File

@@ -1,8 +1,8 @@
#ifndef SEQUENCE_VALUES_CONTROLLER_H #ifndef SEQUENCE_VALUES_CONTROLLER_H
#define SEQUENCE_VALUES_CONTROLLER_H #define SEQUENCE_VALUES_CONTROLLER_H
#include "../sequence_store.h" #include "../../shared/sequence_store.h"
#include "../sequence_title_cell.h" #include "../../shared/sequence_title_cell.h"
#include "../../shared/values_controller.h" #include "../../shared/values_controller.h"
#include "interval_parameter_controller.h" #include "interval_parameter_controller.h"
@@ -46,7 +46,7 @@ private:
bool setDataAtLocation(double floatBody, int columnIndex, int rowIndex) override; bool setDataAtLocation(double floatBody, int columnIndex, int rowIndex) override;
// Model getters // Model getters
SequenceStore * functionStore() const override { return static_cast<SequenceStore *>(Shared::ValuesController::functionStore()); } Shared::SequenceStore * functionStore() const override { return static_cast<Shared::SequenceStore *>(Shared::ValuesController::functionStore()); }
Shared::Interval * intervalAtColumn(int columnIndex) override; Shared::Interval * intervalAtColumn(int columnIndex) override;
// Function evaluation memoization // Function evaluation memoization
@@ -75,7 +75,7 @@ private:
assert (j >= 0 && j < abscissaTitleCellsCount()); assert (j >= 0 && j < abscissaTitleCellsCount());
return &m_abscissaTitleCell; return &m_abscissaTitleCell;
} }
SequenceTitleCell * functionTitleCells(int j) override { Shared::SequenceTitleCell * functionTitleCells(int j) override {
assert(j >= 0 && j < k_maxNumberOfDisplayableSequences); assert(j >= 0 && j < k_maxNumberOfDisplayableSequences);
return &m_sequenceTitleCells[j]; return &m_sequenceTitleCells[j];
} }
@@ -85,7 +85,7 @@ private:
} }
SelectableTableView m_selectableTableView; SelectableTableView m_selectableTableView;
SequenceTitleCell m_sequenceTitleCells[k_maxNumberOfDisplayableSequences]; Shared::SequenceTitleCell m_sequenceTitleCells[k_maxNumberOfDisplayableSequences];
EvenOddBufferTextCell m_floatCells[k_maxNumberOfDisplayableCells]; EvenOddBufferTextCell m_floatCells[k_maxNumberOfDisplayableCells];
EvenOddMessageTextCell m_abscissaTitleCell; EvenOddMessageTextCell m_abscissaTitleCell;
EvenOddEditableTextCell m_abscissaCells[k_maxNumberOfDisplayableRows]; EvenOddEditableTextCell m_abscissaCells[k_maxNumberOfDisplayableRows];

View File

@@ -16,6 +16,9 @@ app_shared_test_src = $(addprefix apps/shared/,\
labeled_curve_view.cpp \ labeled_curve_view.cpp \
memoized_curve_view_range.cpp \ memoized_curve_view_range.cpp \
range_1D.cpp \ range_1D.cpp \
sequence.cpp\
sequence_context.cpp\
sequence_store.cpp\
toolbox_helpers.cpp \ toolbox_helpers.cpp \
zoom_and_pan_curve_view_controller.cpp \ zoom_and_pan_curve_view_controller.cpp \
zoom_curve_view_controller.cpp \ zoom_curve_view_controller.cpp \
@@ -26,6 +29,7 @@ app_shared_src = $(addprefix apps/shared/,\
buffer_function_title_cell.cpp \ buffer_function_title_cell.cpp \
buffer_text_view_with_text_field.cpp \ buffer_text_view_with_text_field.cpp \
button_with_separator.cpp \ button_with_separator.cpp \
cache_context.cpp \
cursor_view.cpp \ cursor_view.cpp \
editable_cell_table_view_controller.cpp \ editable_cell_table_view_controller.cpp \
expression_field_delegate_app.cpp \ expression_field_delegate_app.cpp \
@@ -60,6 +64,10 @@ app_shared_src = $(addprefix apps/shared/,\
range_parameter_controller.cpp \ range_parameter_controller.cpp \
regular_table_view_data_source.cpp \ regular_table_view_data_source.cpp \
round_cursor_view.cpp \ round_cursor_view.cpp \
sequence.cpp\
sequence_context.cpp\
sequence_store.cpp\
sequence_title_cell.cpp \
scrollable_multiple_expressions_view.cpp \ scrollable_multiple_expressions_view.cpp \
scrollable_two_expressions_cell.cpp \ scrollable_two_expressions_cell.cpp \
separable.cpp \ separable.cpp \
@@ -93,9 +101,11 @@ app_shared_test_src += $(addprefix apps/graph/,\
continuous_function_store.cpp\ continuous_function_store.cpp\
) )
app_shared_test_src += $(addprefix apps/sequence/,\ app_shared_test_src += $(addprefix apps/shared/,\
sequence.cpp\ cache_context.cpp \
sequence_store.cpp\ sequence.cpp \
sequence_context.cpp \
sequence_store.cpp \
) )
tests_src += $(addprefix apps/shared/test/,\ tests_src += $(addprefix apps/shared/test/,\

View File

@@ -7,7 +7,7 @@
using namespace Poincare; using namespace Poincare;
namespace Sequence { namespace Shared {
template<typename T> template<typename T>
CacheContext<T>::CacheContext(Context * parentContext) : CacheContext<T>::CacheContext(Context * parentContext) :

View File

@@ -6,7 +6,7 @@
#include <poincare/symbol.h> #include <poincare/symbol.h>
#include "sequence_context.h" #include "sequence_context.h"
namespace Sequence { namespace Shared {
template<typename T> template<typename T>
class CacheContext : public Poincare::ContextWithParent { class CacheContext : public Poincare::ContextWithParent {

View File

@@ -41,6 +41,8 @@ private:
static Ion::Storage::Record::ErrorStatus SetExpressionForFunction(const Poincare::Expression & expression, const Poincare::SymbolAbstract & symbol, Ion::Storage::Record previousRecord); static Ion::Storage::Record::ErrorStatus SetExpressionForFunction(const Poincare::Expression & expression, const Poincare::SymbolAbstract & symbol, Ion::Storage::Record previousRecord);
// Record getter // Record getter
static Ion::Storage::Record SymbolAbstractRecordWithBaseName(const char * name); static Ion::Storage::Record SymbolAbstractRecordWithBaseName(const char * name);
}; };
} }

View File

@@ -12,10 +12,9 @@
#include <apps/i18n.h> #include <apps/i18n.h>
#include <cmath> #include <cmath>
using namespace Shared;
using namespace Poincare; using namespace Poincare;
namespace Sequence { namespace Shared {
I18n::Message Sequence::parameterMessageName() const { I18n::Message Sequence::parameterMessageName() const {
return I18n::Message::N; return I18n::Message::N;

View File

@@ -9,7 +9,7 @@
#include <emscripten.h> #include <emscripten.h>
#endif #endif
namespace Sequence { namespace Shared {
/* WARNING: after calling setType, setInitialRank, setContent, setFirstInitialConditionContent /* WARNING: after calling setType, setInitialRank, setContent, setFirstInitialConditionContent
* or setSecondInitialConditionContent, the sequence context needs to * or setSecondInitialConditionContent, the sequence context needs to

View File

@@ -5,9 +5,8 @@
#include <cmath> #include <cmath>
using namespace Poincare; using namespace Poincare;
using namespace Shared;
namespace Sequence { namespace Shared {
template<typename T> template<typename T>
TemplatedSequenceContext<T>::TemplatedSequenceContext() : TemplatedSequenceContext<T>::TemplatedSequenceContext() :

View File

@@ -5,7 +5,7 @@
#include <poincare/expression.h> #include <poincare/expression.h>
#include <poincare/symbol.h> #include <poincare/symbol.h>
namespace Sequence { namespace Shared {
constexpr static int MaxRecurrenceDepth = 2; constexpr static int MaxRecurrenceDepth = 2;
static constexpr int MaxNumberOfSequences = 3; static constexpr int MaxNumberOfSequences = 3;

View File

@@ -5,7 +5,7 @@ extern "C" {
#include <stddef.h> #include <stddef.h>
} }
namespace Sequence { namespace Shared {
constexpr const char * SequenceStore::k_sequenceNames[MaxNumberOfSequences]; constexpr const char * SequenceStore::k_sequenceNames[MaxNumberOfSequences];

View File

@@ -7,7 +7,7 @@
#include <stdint.h> #include <stdint.h>
#include <escher.h> #include <escher.h>
namespace Sequence { namespace Shared {
class SequenceStore : public Shared::FunctionStore { class SequenceStore : public Shared::FunctionStore {
public: public:

View File

@@ -1,10 +1,9 @@
#include "sequence_title_cell.h" #include "sequence_title_cell.h"
#include <assert.h> #include <assert.h>
using namespace Shared;
using namespace Poincare; using namespace Poincare;
namespace Sequence { namespace Shared {
SequenceTitleCell::SequenceTitleCell() : SequenceTitleCell::SequenceTitleCell() :
Shared::FunctionTitleCell(Orientation::VerticalIndicator), Shared::FunctionTitleCell(Orientation::VerticalIndicator),

View File

@@ -4,7 +4,7 @@
#include "../shared/function_title_cell.h" #include "../shared/function_title_cell.h"
#include <poincare_layouts.h> #include <poincare_layouts.h>
namespace Sequence { namespace Shared {
class SequenceTitleCell : public Shared::FunctionTitleCell { class SequenceTitleCell : public Shared::FunctionTitleCell {
public: public:

View File

@@ -1,8 +1,8 @@
#include <quiz.h> #include <quiz.h>
#include "../continuous_function.h" #include "../continuous_function.h"
#include "../../graph/continuous_function_store.h" #include "../../graph/continuous_function_store.h"
#include "../../sequence/sequence.h" #include "../sequence.h"
#include "../../sequence/sequence_store.h" #include "../sequence_store.h"
namespace Shared { namespace Shared {
@@ -14,12 +14,12 @@ void interactWithBaseRecordMember(F * fct) {
(void) color; // Silence compilation warning about unused variable. (void) color; // Silence compilation warning about unused variable.
} }
void interactWithRecordMember(Sequence::SequenceStore * store, Ion::Storage::Record rec) { void interactWithRecordMember(SequenceStore * store, Ion::Storage::Record rec) {
Sequence::Sequence * seq = store->modelForRecord(rec); Sequence * seq = store->modelForRecord(rec);
/* Setting Sequence type will write record member m_initialConditionSizes, /* Setting Sequence type will write record member m_initialConditionSizes,
* which has a 2-byte alignment */ * which has a 2-byte alignment */
seq->setType(Sequence::Sequence::Type::SingleRecurrence); seq->setType(Sequence::Type::SingleRecurrence);
interactWithBaseRecordMember<Sequence::Sequence>(seq); interactWithBaseRecordMember<Sequence>(seq);
} }
void interactWithRecordMember(Graph::ContinuousFunctionStore * store, Ion::Storage::Record rec) { void interactWithRecordMember(Graph::ContinuousFunctionStore * store, Ion::Storage::Record rec) {
@@ -73,7 +73,7 @@ QUIZ_CASE(alignment_handling) {
* properly. It also ensures that the right test - load and store of * properly. It also ensures that the right test - load and store of
* differently-aligned objects - is performed (if storage/record * differently-aligned objects - is performed (if storage/record
* implementations change for instance). */ * implementations change for instance). */
testAlignmentHandlingFor<Sequence::SequenceStore>(); testAlignmentHandlingFor<SequenceStore>();
testAlignmentHandlingFor<Graph::ContinuousFunctionStore>(); testAlignmentHandlingFor<Graph::ContinuousFunctionStore>();
} }

View File

@@ -8,7 +8,7 @@
#include <poincare/serialization_helper.h> #include <poincare/serialization_helper.h>
#include <poincare/parenthesis.h> #include <poincare/parenthesis.h>
#include <poincare/complex.h> #include <poincare/complex.h>
#include <apps/sequence/sequence.h> #include <apps/shared/sequence.h>
namespace Poincare { namespace Poincare {