#include #include "SIMDHelpers.h" #include "absl/types/span.h" template class HistoricalBuffer { public: HistoricalBuffer() = delete; HistoricalBuffer(size_t size) : size(size) { resize(size); } void resize(int size) { buffer.resize(size); ::fill(absl::MakeSpan(buffer), 0.0); index = 0; } void push(ValueType value) { if (size > 0) { buffer[index] = value; if (++index == size) index = 0; } } ValueType getAverage() const { return ::mean(buffer); } private: std::vector buffer; size_t size { 0 }; size_t index { 0 }; };