Files
bsb2/kernel/sync/message.h
Niklas Gollenstede 174fe17e89 Handout
2025-10-31 22:37:36 +01:00

45 lines
1.2 KiB
C

#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<Message> &queue) {
for (Message *m : queue) {
if (m->pid == pid) {
return queue.remove(m);
}
}
return nullptr;
}
};