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
|