Memoize the mean power

This commit is contained in:
Paul Ferrand 2020-05-05 23:40:06 +02:00
parent 646b71cb43
commit 13dcadc321

View file

@ -37,6 +37,7 @@ public:
buffer.resize(size); buffer.resize(size);
fill<ValueType>(absl::MakeSpan(buffer), 0.0); fill<ValueType>(absl::MakeSpan(buffer), 0.0);
index = 0; index = 0;
validMean = false;
} }
/** /**
@ -46,6 +47,7 @@ public:
*/ */
void push(ValueType value) void push(ValueType value)
{ {
validMean = false;
if (size > 0) { if (size > 0) {
buffer[index] = value; buffer[index] = value;
if (++index == size) if (++index == size)
@ -60,11 +62,18 @@ public:
*/ */
ValueType getAverage() const ValueType getAverage() const
{ {
return mean<ValueType>(buffer); if (!validMean) {
mean = sfz::mean<ValueType>(buffer);
validMean = true;
}
return mean;
} }
private: private:
Buffer<ValueType> buffer; Buffer<ValueType> buffer;
size_t size { 0 }; size_t size { 0 };
size_t index { 0 }; size_t index { 0 };
mutable bool validMean { true };
mutable ValueType mean { 0.0 };
}; };
} }