34 lines
627 B
C++
34 lines
627 B
C++
#ifndef DELAYBUFFER_H
|
|
#define DELAYBUFFER_H
|
|
|
|
#include <vector>
|
|
|
|
/** efficient delay using a ring-buffer */
|
|
template <typename Scalar> class DelayBuffer {
|
|
|
|
size_t head = 0;
|
|
std::vector<Scalar> vec;
|
|
|
|
public:
|
|
|
|
/** ctor */
|
|
DelayBuffer(int size) {
|
|
vec.resize(size);
|
|
}
|
|
|
|
/** set all elements to the same value */
|
|
void setAll(const Scalar s) {
|
|
std::fill(vec.begin(), vec.end(), s);
|
|
}
|
|
|
|
/** append a new element, get the delayed output */
|
|
Scalar add(Scalar s) {
|
|
vec[head] = s;
|
|
head = (head + 1) % vec.size(); // next to-be-overwritten element = oldest element = tail
|
|
return vec[head];
|
|
}
|
|
|
|
};
|
|
|
|
#endif // DELAYBUFFER_H
|