#pragma once #include "../object/queue.h" #include "../types.h" struct Message { const size_t pid; ///< Sender Thread ID of message const uintptr_t sbuffer; ///< Send buffer const size_t ssize; ///< Send buffer size const uintptr_t rbuffer; ///< Receive buffer const size_t rsize; ///< Receive buffer size Message *queue_link = nullptr; ///< Next message in the message queue /*! \brief Constructor * \param pid Sender Thread ID of message * \param sbuffer Send buffer * \param ssize Send buffer size * \param rbuffer Receive buffer * \param rsize Receive buffer size */ explicit Message(int pid, uintptr_t sbuffer = 0, size_t ssize = 0, uintptr_t rbuffer = 0, size_t rsize = 0) : pid(pid), sbuffer(sbuffer), ssize(ssize), rbuffer(rbuffer), rsize(rsize) {} /*! \brief Helper to retrieve (and remove) a message from the queue * \param pid Thread id of message * \param queue Queue with message * \return Pointer to message or nullptr */ static Message *dequeueByPID(size_t pid, Queue &queue) { for (Message *m : queue) { if (m->pid == pid) { return queue.remove(m); } } return nullptr; } };