use core::cell::Cell;
use hicollections::{list, List, ListNode};
use super::Scheduler;
#[repr(C)]
pub struct Event {
pub(crate) node: ListNode,
pub(crate) events: Cell<u32>,
handle: fn(&Event, u32, &mut Scheduler),
}
pub fn event_list_new() -> List<Event> {
list!(Event, node)
}
impl Event {
pub fn new(handle: fn(&Event, u32, &mut Scheduler)) -> Self {
Self {
node: ListNode::new(),
events: Cell::new(0),
handle,
}
}
pub fn handle(&self, event: u32, sched: &mut Scheduler) {
(self.handle)(self, event, sched)
}
}