mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/reg] Store::m_seriesChecksum is Snapshot::m_prevModelsVersions
Share these objects instead of duplicating them
This commit is contained in:
committed by
RubenNumworks
parent
53705fb333
commit
702772a7c9
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user