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