use std::{panic::Location, sync::atomic::AtomicBool, task::Waker};
use super::{
CvId, FLASH, WaiterId,
credit::WaitGuard,
gate::TaskGate,
sched::{AsyncHandle, ParkRole, WakeBatch},
wake::Token,
};
use crate::{
flash::{diag, ids::ThreadKey},
sync::Arc,
};
pub(crate) fn next_condvar_id() -> CvId {
FLASH.next_condvar_id()
}
pub(crate) fn describe_cvid(cvid: CvId, kind: diag::PrimKind, loc: &'static Location<'static>) {
FLASH.describe_cvid(cvid, kind, loc);
}
#[cfg(test)]
pub(crate) fn park_for(d: crate::flash::Duration) {
FLASH.park_for(d);
}
pub(crate) fn park_timed_unparkable(
d: crate::flash::Duration,
thread_id: ThreadKey,
role: ParkRole,
) {
FLASH.park_timed_unparkable(d, thread_id, role);
}
pub(crate) fn sleep_timed(d: crate::flash::Duration) {
FLASH.sleep_timed(d);
}
pub(crate) fn unpark(thread_id: ThreadKey) {
FLASH.unpark(thread_id);
}
pub(crate) fn yield_until_advance() {
FLASH.yield_until_advance();
}
pub(crate) fn register_yield_async(waker: Waker) -> (WaiterId, Arc<AtomicBool>, WakeBatch) {
FLASH.register_yield_async(waker)
}
pub(crate) fn cancel_yield(id: WaiterId) {
FLASH.cancel_yield(id);
}
pub(crate) fn register_condvar_timed(
deadline_nanos: u64,
cvid: CvId,
) -> (Arc<Token>, WakeBatch, WaitGuard<'static>) {
FLASH.register_condvar_timed(deadline_nanos, cvid)
}
pub(crate) fn register_condvar_untimed(cvid: CvId) -> (Arc<Token>, WakeBatch, WaitGuard<'static>) {
FLASH.register_condvar_untimed(cvid)
}
pub(crate) fn signal_condvar(cvid: CvId, all: bool) {
FLASH.signal_condvar(cvid, all);
}
pub(crate) fn register_sleep_async(delta_nanos: u64, waker: Waker) -> (AsyncHandle, WakeBatch) {
FLASH.register_sleep_async(delta_nanos, waker)
}
pub(crate) fn register_notify_async(cvid: CvId, waker: Waker) -> (Option<AsyncHandle>, WakeBatch) {
FLASH.register_notify_async(cvid, waker)
}
pub(crate) fn async_acquire(loc: &'static Location<'static>) -> Arc<TaskGate> {
FLASH.async_acquire(loc)
}
pub(crate) fn cancel_async_wait(handle: &AsyncHandle) {
FLASH.cancel_async_wait(handle);
}
pub(crate) fn signal_notify(cvid: CvId) {
FLASH.signal_notify(cvid);
}
pub(crate) fn register_channel_async(cvid: CvId, waker: Waker) -> (AsyncHandle, WakeBatch) {
FLASH.register_channel_async(cvid, waker)
}
pub(crate) fn signal_channel(cvid: CvId, all: bool) {
FLASH.signal_channel(cvid, all);
}
pub(crate) fn dump() -> String {
FLASH.to_string()
}
#[cfg(test)]
pub(crate) fn async_active_count() -> usize {
FLASH.async_active_count()
}
#[cfg(test)]
pub(crate) fn diag_yield_count() -> usize {
FLASH.diag_yield_count()
}