#include "freeRTOSMPMCQueue.hpp" template freeRTOSMPMCQueue::freeRTOSMPMCQueue(uint32_t size) { this->queue = xQueueCreate(size, sizeof(T)); } template freeRTOSMPMCQueue::~freeRTOSMPMCQueue() { vQueueDelete(this->queue); } template bool freeRTOSMPMCQueue::push(T obj) { return xQueueSendToBack(this->queue, &obj, 0) == pdTRUE; } template bool freeRTOSMPMCQueue::push(T obj, bool overwrite) { if (overwrite == true) { xQueueOverwrite(this->queue, obj); return true; } else { return this->push(obj); } } template std::optional freeRTOSMPMCQueue::pop() { T retval; if (xQueueReceive(this->queue, &retval, 0) == pdTRUE) { return retval; } return std::nullopt; } template std::optional freeRTOSMPMCQueue::peek() { T retval; if (xQueuePeek(this->queue, &retval, 0) == pdTRUE) { return retval; } return std::nullopt; } template bool freeRTOSMPMCQueue::isFull() { return (xQueueIsQueueFullFromISR(this->queue) == pdTRUE); } template bool freeRTOSMPMCQueue::isEmpty() { return (xQueueIsQueueEmptyFromISR(this->queue) == pdTRUE); }