#ifndef _PREALLOCBUFFERQUEUE_H_
|
#define _PREALLOCBUFFERQUEUE_H_
|
|
#include <cstdint>
|
#include <vector>
|
#include <queue>
|
|
class PreAllocBufferQueue
|
{
|
public:
|
struct Config
|
{
|
bool multithreadSafe;
|
bool fullQueueDropFront;
|
bool fullQueueSync;
|
size_t count;
|
size_t maxBuffSize;
|
|
Config()
|
: multithreadSafe(false), fullQueueDropFront(false), fullQueueSync(false), count(0), maxBuffSize(0)
|
{ }
|
};
|
|
struct Buffer
|
{
|
uint8_t* buffer;
|
size_t buffSize;
|
|
Buffer() : buffer(nullptr), buffSize(0) { }
|
};
|
|
PreAllocBufferQueue(const Config& _cfg);
|
|
~PreAllocBufferQueue();
|
|
Buffer* Dequeue();
|
void Release(Buffer* buffer);
|
|
Buffer* Enqueue();
|
|
bool Empty() const;
|
bool Full() const;
|
|
const Config& GetConfig() const { return cfg; }
|
|
private:
|
const Config cfg;
|
void* mtsMux;
|
|
typedef std::vector<Buffer*> buffers_vec_t;
|
buffers_vec_t allBuffers;
|
buffers_vec_t freeBuffers;
|
|
typedef std::queue<Buffer*> buffers_que_t;
|
buffers_que_t usedBuffers;
|
};
|
|
#endif
|