1mod dyn_future;
2mod algorithm;
3mod wheel;
4mod handle;
5mod registry;
6
7pub use self::handle::{IdNum, SpawnParams, State, WheelHandle};
8pub use self::wheel::{LockedWheel, SuspendError, Wheel};
9
10use core::cell::*;
11use core::ops::{Deref, DerefMut};
12
13pub(crate) struct Ucw<T>{
18 #[cfg(debug_assertions)]
19 inner: RefCell<T>,
20 #[cfg(not(debug_assertions))]
21 inner: UnsafeCell<T>,
22}
23
24pub(crate) struct UcwRef<'a,T>{
25 #[cfg(debug_assertions)]
26 inner: Ref<'a,T>,
27 #[cfg(not(debug_assertions))]
28 inner: &'a T,
29}
30pub(crate) struct UcwRefMut<'a,T>{
31 #[cfg(debug_assertions)]
32 inner: RefMut<'a,T>,
33 #[cfg(not(debug_assertions))]
34 inner: &'a mut T,
35}
36impl<T> Deref for UcwRef<'_,T>{
37 type Target = T;
38 #[inline(always)]
39 fn deref(&self) -> &Self::Target { self.inner.deref() }
40}
41impl<T> Deref for UcwRefMut<'_,T>{
42 type Target = T;
43 #[inline(always)]
44 fn deref(&self) -> &Self::Target { self.inner.deref() }
45}
46impl<T> DerefMut for UcwRefMut<'_,T>{
47 #[inline(always)]
48 fn deref_mut(&mut self) -> &mut Self::Target { self.inner.deref_mut() }
49}
50
51impl<T> Ucw<T>{
52 #[inline(always)]
53 pub(crate) fn new(value: T)->Self{
54 Self{
55 #[cfg(debug_assertions)]
56 inner: RefCell::new(value),
57 #[cfg(not(debug_assertions))]
58 inner: UnsafeCell::new(value),
59 }
60 }
61 #[inline(always)]
62 pub(crate) fn borrow(&self)->UcwRef<'_,T>{
63 UcwRef{
64 #[cfg(debug_assertions)]
65 inner: self.inner.borrow(),
66 #[cfg(not(debug_assertions))]
67 inner: unsafe{ &*self.inner.get() },
68 }
69 }
70 #[inline(always)]
71 pub(crate) fn borrow_mut(&self)->UcwRefMut<'_,T>{
72 UcwRefMut{
73 #[cfg(debug_assertions)]
74 inner: self.inner.borrow_mut(),
75 #[cfg(not(debug_assertions))]
76 inner: unsafe{ &mut *self.inner.get() },
77 }
78 }
79}
80
81