1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
pub(crate) mod futures { pub(crate) use futures::task; pub(crate) use task::AtomicTask; } pub(crate) mod sync { pub(crate) use std::sync::atomic; pub(crate) use std::sync::Arc; use std::cell::UnsafeCell; pub(crate) struct CausalCell<T>(UnsafeCell<T>); impl<T> CausalCell<T> { pub(crate) fn new(data: T) -> CausalCell<T> { CausalCell(UnsafeCell::new(data)) } pub(crate) fn with<F, R>(&self, f: F) -> R where F: FnOnce(*const T) -> R, { f(self.0.get()) } pub(crate) fn with_mut<F, R>(&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(); }