The Pedigree Project 0.1
RelayEvent.cc
1/*
2 * Copyright (c) 2026, Pedigree Developers
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted.
6 */
7
8#include "pedigree/kernel/process/RelayEvent.h"
9#include "pedigree/kernel/process/Thread.h"
10#include "pedigree/kernel/processor/Processor.h"
11#include "pedigree/kernel/processor/ProcessorInformation.h"
12#include "pedigree/kernel/utilities/lib.h"
13
14RelayEvent::RelayEvent(Callback callback, size_t number)
15 : Event(reinterpret_cast<uintptr_t>(&RelayEvent::dispatch), false),
16 m_Callback(callback),
17 m_Number(number) {}
18
19size_t RelayEvent::serialize(uint8_t* buffer) {
20 MemoryCopy(buffer, &m_Callback, sizeof(m_Callback));
21 return sizeof(m_Callback);
22}
23
25 return m_Number;
26}
27
28void RelayEvent::dispatch(size_t buffer) {
29 Callback callback = nullptr;
30 MemoryCopy(&callback, reinterpret_cast<void*>(buffer), sizeof(callback));
31 Thread* thread = Processor::information().getCurrentThread();
32 if (callback && thread) {
33 callback(thread);
34 }
35}
Definition Event.h:49
static ProcessorInformation & information()
size_t serialize(uint8_t *buffer) override
Definition RelayEvent.cc:19
size_t getNumber() override
Definition RelayEvent.cc:24