use core::ptr::NonNull;
use core::task::Waker;
use super::{TaskHeader, TaskRef, wake_task};
pub(crate) unsafe fn from_task(p: TaskRef) -> Waker {
Waker::from_turbo_ptr(NonNull::new_unchecked(p.as_ptr() as _))
}
pub fn task_from_waker(waker: &Waker) -> TaskRef {
let ptr = waker.as_turbo_ptr().as_ptr();
unsafe { TaskRef::from_ptr(ptr as *const TaskHeader) }
}
pub(crate) fn try_task_from_waker(waker: &Waker) -> Option<TaskRef> {
Some(task_from_waker(waker))
}
#[inline(never)]
#[unsafe(no_mangle)]
fn _turbo_wake(ptr: NonNull<()>) {
let task = unsafe { TaskRef::from_ptr(ptr.as_ptr() as *const TaskHeader) };
wake_task(task)
}