aboutsummaryrefslogtreecommitdiff
path: root/embassy-executor/src/executor/raw/util.rs
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-executor/src/executor/raw/util.rs')
-rw-r--r--embassy-executor/src/executor/raw/util.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/embassy-executor/src/executor/raw/util.rs b/embassy-executor/src/executor/raw/util.rs
new file mode 100644
index 000000000..ed5822188
--- /dev/null
+++ b/embassy-executor/src/executor/raw/util.rs
@@ -0,0 +1,33 @@
1use core::cell::UnsafeCell;
2use core::mem::MaybeUninit;
3use core::ptr;
4
5pub(crate) struct UninitCell<T>(MaybeUninit<UnsafeCell<T>>);
6impl<T> UninitCell<T> {
7 pub const fn uninit() -> Self {
8 Self(MaybeUninit::uninit())
9 }
10
11 pub unsafe fn as_mut_ptr(&self) -> *mut T {
12 (*self.0.as_ptr()).get()
13 }
14
15 #[allow(clippy::mut_from_ref)]
16 pub unsafe fn as_mut(&self) -> &mut T {
17 &mut *self.as_mut_ptr()
18 }
19
20 pub unsafe fn write(&self, val: T) {
21 ptr::write(self.as_mut_ptr(), val)
22 }
23
24 pub unsafe fn drop_in_place(&self) {
25 ptr::drop_in_place(self.as_mut_ptr())
26 }
27}
28
29impl<T: Copy> UninitCell<T> {
30 pub unsafe fn read(&self) -> T {
31 ptr::read(self.as_mut_ptr())
32 }
33}