Skip to main content

dope_core/driver/schedule/ready/wake/
waker.rs

1use std::mem;
2
3use ready::task;
4
5use crate::driver::schedule::ready;
6
7/// A wake capability preserves its invariant driver scope through registration.
8///
9///
10#[repr(transparent)]
11#[derive(PartialEq, Eq)]
12pub struct Waker<'d>(pub(super) ready::Address<'d>);
13
14impl<'d> Waker<'d> {
15    pub const fn key(&self) -> &ready::Retained<'d> {
16        &self.0.key
17    }
18
19    pub fn wake(self) {
20        self.0.wake();
21    }
22}
23
24impl<'d> From<ready::Target<'d>> for Waker<'d> {
25    fn from(target: ready::Target<'d>) -> Self {
26        Self(target.address())
27    }
28}
29
30impl<'d> From<task::Parent<'d>> for Waker<'d> {
31    fn from(parent: task::Parent<'d>) -> Self {
32        Self(parent.address())
33    }
34}
35
36const _: () = {
37    assert!(mem::size_of::<Waker<'static>>() == 2 * mem::size_of::<usize>());
38    assert!(mem::size_of::<Option<Waker<'static>>>() == mem::size_of::<Waker<'static>>());
39};