#pragma once #include "MPMCQueueInterface.hpp" #include "SimulatorSPSCQueue.hpp" #include template class SimulatorMPMCQueue: public SimulatorSPSCQueue, public MPMCQueueInterface { public: SimulatorMPMCQueue(uint32_t size): SimulatorSPSCQueue(size){}; bool push (T obj); bool push (T obj, bool overwrite); std::optional pop(); std::optional peek(); bool isFull(); bool isEmpty(); private: T* data; uint32_t size; uint32_t rd_index; uint32_t wr_index; uint32_t incrementIndex(uint32_t index); std::mutex mtx; };