diff --git a/apps/statistics/store.cpp b/apps/statistics/store.cpp index 1096b4e62..4ec861498 100644 --- a/apps/statistics/store.cpp +++ b/apps/statistics/store.cpp @@ -16,7 +16,8 @@ Store::Store() : FloatPairStore(), m_barWidth(1.0), m_firstDrawnBarAbscissa(0.0), - m_seriesEmpty{true, true, true} + m_seriesEmpty{true, true, true}, + m_numberOfNonEmptySeries(0) { } @@ -89,13 +90,7 @@ bool Store::isEmpty() const { } int Store::numberOfNonEmptySeries() const { - int result = 0; - for (int i = 0; i < k_numberOfSeries; i ++) { - if (!seriesIsEmpty(i)) { - result++; - } - } - return result; + return m_numberOfNonEmptySeries; } bool Store::seriesIsEmpty(int i) const { @@ -232,16 +227,29 @@ double Store::squaredValueSum(int series) const { void Store::set(double f, int series, int i, int j) { FloatPairStore::set(f, series, i, j); m_seriesEmpty[series] = sumOfOccurrences(series) == 0; + updateNonEmptySeriesCount(); } void Store::deletePairOfSeriesAtIndex(int series, int j) { FloatPairStore::deletePairOfSeriesAtIndex(series, j); m_seriesEmpty[series] = sumOfOccurrences(series) == 0; + updateNonEmptySeriesCount(); } void Store::deleteAllPairsOfSeries(int series) { FloatPairStore::deleteAllPairsOfSeries(series); m_seriesEmpty[series] = true; + updateNonEmptySeriesCount(); +} + +void Store::updateNonEmptySeriesCount() { + int nonEmptySeriesCount = 0; + for (int i = 0; i< k_numberOfSeries; i++) { + if (!m_seriesEmpty[i]) { + nonEmptySeriesCount++; + } + } + m_numberOfNonEmptySeries = nonEmptySeriesCount; } /* Private methods */ diff --git a/apps/statistics/store.h b/apps/statistics/store.h index 31a43dd40..99381d46d 100644 --- a/apps/statistics/store.h +++ b/apps/statistics/store.h @@ -55,6 +55,8 @@ public: void deletePairOfSeriesAtIndex(int series, int j) override; void deleteAllPairsOfSeries(int series) override; + void updateNonEmptySeriesCount(); + private: double defaultValue(int series, int i, int j) const override; double sumOfValuesBetween(int series, double x1, double x2) const; @@ -65,6 +67,7 @@ private: double m_barWidth; double m_firstDrawnBarAbscissa; bool m_seriesEmpty[k_numberOfSeries]; + int m_numberOfNonEmptySeries; }; typedef double (Store::*CalculPointer)(int) const;