diff options
author | Dario Nieuwenhuis <dirbaio@dirbaio.net> | 2022-08-17 23:40:16 +0200 |
---|---|---|
committer | Dario Nieuwenhuis <dirbaio@dirbaio.net> | 2022-08-18 01:22:30 +0200 |
commit | 5daa173ce4b153a532b4daa9e94c7a248231f25b (patch) | |
tree | 2ef0b4d6f9b1c02dac2589e7b57982c20cbc0e66 /embassy-executor/src/raw/util.rs | |
parent | 1c5b54a4823d596db730eb476c3ab78110557214 (diff) | |
download | embassy-5daa173ce4b153a532b4daa9e94c7a248231f25b.zip |
Split embassy-time from embassy-executor.
Diffstat (limited to 'embassy-executor/src/raw/util.rs')
-rw-r--r-- | embassy-executor/src/raw/util.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/embassy-executor/src/raw/util.rs b/embassy-executor/src/raw/util.rs new file mode 100644 index 00000000..ed582218 --- /dev/null +++ b/embassy-executor/src/raw/util.rs @@ -0,0 +1,33 @@ +use core::cell::UnsafeCell; +use core::mem::MaybeUninit; +use core::ptr; + +pub(crate) struct UninitCell<T>(MaybeUninit<UnsafeCell<T>>); +impl<T> UninitCell<T> { + pub const fn uninit() -> Self { + Self(MaybeUninit::uninit()) + } + + pub unsafe fn as_mut_ptr(&self) -> *mut T { + (*self.0.as_ptr()).get() + } + + #[allow(clippy::mut_from_ref)] + pub unsafe fn as_mut(&self) -> &mut T { + &mut *self.as_mut_ptr() + } + + pub unsafe fn write(&self, val: T) { + ptr::write(self.as_mut_ptr(), val) + } + + pub unsafe fn drop_in_place(&self) { + ptr::drop_in_place(self.as_mut_ptr()) + } +} + +impl<T: Copy> UninitCell<T> { + pub unsafe fn read(&self) -> T { + ptr::read(self.as_mut_ptr()) + } +} |