pub(crate) mod futures { pub(crate) use crate::task::AtomicWaker; } pub(crate) mod sync { pub(crate) use std::sync::atomic; pub(crate) use std::sync::Arc; use std::cell::UnsafeCell; pub(crate) struct CausalCell(UnsafeCell); impl CausalCell { pub(crate) fn new(data: T) -> CausalCell { CausalCell(UnsafeCell::new(data)) } pub(crate) fn with(&self, f: F) -> R where F: FnOnce(*const T) -> R, { f(self.0.get()) } pub(crate) fn with_mut(&self, f: F) -> R where F: FnOnce(*mut T) -> R, { f(self.0.get()) } } } pub(crate) fn yield_now() { ::std::sync::atomic::spin_loop_hint(); }