1
0
Fork 0
Univerxel/src/data/circular_buffer.hpp

26 lines
573 B
C++
Raw Normal View History

2020-07-06 19:18:29 +00:00
#pragma once
#include <memory>
/// Looping array
template <class T>
struct circular_buffer {
circular_buffer(size_t size): size(size), buffer(std::unique_ptr<T[]>(new T[size])) { }
circular_buffer(size_t size, const T& zero): circular_buffer(size) {
for (size_t i = 0; i < size; i++) {
buffer[i] = zero;
}
}
size_t last = 0;
size_t size;
std::unique_ptr<T[]> buffer;
void push(T in) {
last = (last + 1) % size;
buffer[last] = in;
}
T current() const {
return buffer[last];
}
};