Memoize the mean power
This commit is contained in:
parent
646b71cb43
commit
13dcadc321
1 changed files with 10 additions and 1 deletions
|
|
@ -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 };
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue