forked from W4D/soundcube-firmware
58 lines
991 B
C++
58 lines
991 B
C++
#pragma once
|
|
|
|
template<typename T>
|
|
class RingBuffer{
|
|
public:
|
|
RingBuffer() {}
|
|
RingBuffer(size_t size) : bufferSize(size) {}
|
|
|
|
void setSize(size_t size) {
|
|
bufferSize = size;
|
|
}
|
|
|
|
void begin(){
|
|
buffer = new T[bufferSize];
|
|
}
|
|
|
|
bool push(T data){
|
|
if(counter < bufferSize){
|
|
buffer[write] = data;
|
|
write++; // % bufferSize;
|
|
if(write == bufferSize) write = 0;
|
|
counter++;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
T pop(){
|
|
T retval = 0;
|
|
if(counter > 0) {
|
|
counter--;
|
|
retval = buffer[read];
|
|
read++;// % bufferSize;
|
|
if(read == bufferSize) read = 0;
|
|
}
|
|
return retval;
|
|
}
|
|
|
|
bool isEmpty(){
|
|
return counter == 0;
|
|
}
|
|
|
|
bool isFull(){
|
|
return counter == bufferSize;
|
|
}
|
|
|
|
int size(){
|
|
return counter;
|
|
}
|
|
|
|
private:
|
|
size_t bufferSize = 0;
|
|
int counter = 0;
|
|
int write = 0;
|
|
int read = 0;
|
|
T *buffer;
|
|
};
|