[apps/stats] Memoize number of non empty series

This commit is contained in:
Léa Saviot
2018-05-29 18:23:39 +02:00
parent b503213037
commit cf03d7e7ac
2 changed files with 19 additions and 8 deletions

View File

@@ -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 */

View File

@@ -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;