summaryrefslogtreecommitdiff
path: root/embassy-executor/src/raw/util.rs
diff options
context:
space:
mode:
authorDario Nieuwenhuis <dirbaio@dirbaio.net>2022-08-17 23:40:16 +0200
committerDario Nieuwenhuis <dirbaio@dirbaio.net>2022-08-18 01:22:30 +0200
commit5daa173ce4b153a532b4daa9e94c7a248231f25b (patch)
tree2ef0b4d6f9b1c02dac2589e7b57982c20cbc0e66 /embassy-executor/src/raw/util.rs
parent1c5b54a4823d596db730eb476c3ab78110557214 (diff)
downloadembassy-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.rs33
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())
+ }
+}