Files
soundcube-firmware/soundcube-firmware/ringbuffer.h
2025-06-16 01:31:09 +02:00

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;
};