[apps/reg] Store::m_seriesChecksum is Snapshot::m_prevModelsVersions

Share these objects instead of duplicating them
This commit is contained in:
Léa Saviot
2020-03-10 15:13:22 +01:00
committed by RubenNumworks
parent 53705fb333
commit 702772a7c9
6 changed files with 21 additions and 18 deletions

View File

@@ -27,7 +27,6 @@ App::Snapshot::Snapshot() :
m_rangeVersion(0),
m_selectedSeriesIndex(-1)
{
assert(m_previousModelsVersions[0] == 0);
}
App * App::Snapshot::unpack(Container * container) {
@@ -35,10 +34,8 @@ App * App::Snapshot::unpack(Container * container) {
}
void App::Snapshot::reset() {
m_store.deleteAllPairs();
m_store.reset();
m_modelVersion = 0;
assert(sizeof(m_previousModelsVersions) == sizeof(uint32_t) * GraphController::sNumberOfMemoizedModelVersions);
memset(m_previousModelsVersions, 0, sizeof(m_previousModelsVersions));
m_rangeVersion = 0;
setActiveTab(0);
}

View File

@@ -30,7 +30,7 @@ public:
int * graphSelectedDotIndex() { return &m_graphSelectedDotIndex; }
int * selectedSeriesIndex() { return &m_selectedSeriesIndex; }
uint32_t * modelVersion() { return &m_modelVersion; }
uint32_t * previousModelsVersions() { return m_previousModelsVersions; }
uint32_t * previousModelsVersions() { return m_store.seriesChecksum(); }
uint32_t * rangeVersion() { return &m_rangeVersion; }
private:
void tidy() override;
@@ -38,7 +38,6 @@ public:
Shared::CurveViewCursor m_cursor;
int m_graphSelectedDotIndex;
uint32_t m_modelVersion;
uint32_t m_previousModelsVersions[GraphController::sNumberOfMemoizedModelVersions];
uint32_t m_rangeVersion;
int m_selectedSeriesIndex;
};

View File

@@ -352,7 +352,8 @@ uint32_t GraphController::modelVersion() {
}
uint32_t GraphController::modelVersionAtIndex(size_t i) {
return m_store->seriesChecksumAtIndex(i);
assert(i < numberOfMemoizedVersions());
return *(m_store->seriesChecksum() + i);
}
uint32_t GraphController::rangeVersion() {

View File

@@ -16,7 +16,6 @@ namespace Regression {
class GraphController : public Shared::InteractiveCurveViewController {
public:
static constexpr size_t sNumberOfMemoizedModelVersions = Store::k_numberOfSeries;
GraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, Store * store, Shared::CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * previousModelsVersions, uint32_t * rangeVersion, int * selectedDotIndex, int * selectedSeriesIndex);
ViewController * initialisationParameterController() override;
bool isEmpty() const override;
@@ -46,7 +45,7 @@ private:
uint32_t modelVersion() override;
uint32_t modelVersionAtIndex(size_t i) override;
uint32_t rangeVersion() override;
size_t numberOfMemoizedVersions() const override { return sNumberOfMemoizedModelVersions; }
size_t numberOfMemoizedVersions() const override { return Store::k_numberOfSeries; }
int selectedCurveIndex() const override { return *m_selectedSeriesIndex; }
bool closestCurveIndexIsSuitable(int newIndex, int currentIndex) const override;
Poincare::Coordinate2D<double> xyValues(int curveIndex, double x, Poincare::Context * context) const override;

View File

@@ -19,13 +19,14 @@ static_assert(Store::k_numberOfSeries == 3, "Number of series changed, Regressio
Store::Store() :
InteractiveCurveViewRange(),
DoublePairStore(),
m_seriesChecksum{0, 0, 0},
m_angleUnit(Poincare::Preferences::AngleUnit::Degree)
{
for (int i = 0; i < k_numberOfSeries; i++) {
m_regressionTypes[i] = Model::Type::Linear;
m_regressionChanged[i] = false;
}
resetMemoization();
}
void Store::reset() {
deleteAllPairs();
resetMemoization();
}
void Store::tidy() {
@@ -188,6 +189,13 @@ double Store::doubleCastedNumberOfPairsOfSeries(int series) const {
return DoublePairStore::numberOfPairsOfSeries(series);
}
void Store::resetMemoization() {
assert(((int)Model::Type::Linear) == 0);
memset(m_seriesChecksum, 0, sizeof(m_seriesChecksum));
memset(m_regressionTypes, 0, sizeof(m_regressionTypes));
memset(m_regressionChanged, 0, sizeof(m_regressionChanged));
}
float Store::maxValueOfColumn(int series, int i) const {
float maxColumn = -FLT_MAX;
for (int k = 0; k < numberOfPairsOfSeries(series); k++) {

View File

@@ -22,6 +22,7 @@ class Store : public Shared::InteractiveCurveViewRange, public Shared::DoublePai
public:
Store();
void reset();
// Clean pool
void tidy();
@@ -35,10 +36,7 @@ public:
assert((int)m_regressionTypes[series] >= 0 && (int)m_regressionTypes[series] < Model::k_numberOfModels);
return regressionModel((int)m_regressionTypes[series]);
}
uint32_t seriesChecksumAtIndex(size_t i) {
assert(i < k_numberOfSeries);
return m_seriesChecksum[i];
}
uint32_t * seriesChecksum() { return m_seriesChecksum; }
// Dots
/* Return the closest dot to abscissa x above the regression curve if
@@ -74,6 +72,7 @@ public:
double squaredCorrelationCoefficient(int series) const;
private:
constexpr static float k_displayHorizontalMarginRatio = 0.05f;
void resetMemoization();
float maxValueOfColumn(int series, int i) const; //TODO LEA why float ?
float minValueOfColumn(int series, int i) const; //TODO LEA why float ?
Model * regressionModel(int index);