#ifndef _PREALLOCBUFFERQUEUE_H_ #define _PREALLOCBUFFERQUEUE_H_ #include #include #include 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(); Buffer* Seek(); bool Empty() const; bool Full() const; const Config& GetConfig() const { return cfg; } private: const Config cfg; void* mtsMux; typedef std::vector buffers_vec_t; buffers_vec_t allBuffers; buffers_vec_t freeBuffers; typedef std::queue buffers_que_t; buffers_que_t usedBuffers; }; #endif