hirun 0.1.13

A concurrent framework for asynchronous programming based on event-driven, non-blocking I/O mechanism
Documentation
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)
    }
}