35 lines
696 B
C++
35 lines
696 B
C++
// RingBuffer.h
|
|
#ifndef RINGBUFFER_H
|
|
#define RINGBUFFER_H
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <mutex>
|
|
#include <condition_variable>
|
|
#include <vector>
|
|
#include <algorithm>
|
|
#include <cstring>
|
|
|
|
class RingBuffer
|
|
{
|
|
public:
|
|
explicit RingBuffer(size_t size);
|
|
|
|
bool push(const uint8_t* data, size_t size);
|
|
bool pop(uint8_t* outBuffer, size_t& size);
|
|
bool empty() const;
|
|
bool full() const;
|
|
|
|
private:
|
|
std::vector<uint8_t> buffer;
|
|
size_t head;
|
|
size_t tail;
|
|
size_t capacity;
|
|
mutable std::mutex mtx;
|
|
std::condition_variable notEmpty;
|
|
std::condition_variable notFull;
|
|
bool isFull;
|
|
};
|
|
|
|
#endif // RINGBUFFER_H
|