mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/utils/once_cell.rs')
-rw-r--r--src/utils/once_cell.rs11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/utils/once_cell.rs b/src/utils/once_cell.rs
index 4bfd3eb..9dda9ff 100644
--- a/src/utils/once_cell.rs
+++ b/src/utils/once_cell.rs
@@ -13,6 +13,7 @@ pub struct OnceCell<T> {
}
impl<T> OnceCell<T> {
+ #[must_use]
pub const fn new() -> Self {
Self {
value: UnsafeCell::new(MaybeUninit::uninit()),
@@ -30,7 +31,7 @@ impl<T> OnceCell<T> {
pub fn get(&self) -> Option<&T> {
if self.state.load(Ordering::Acquire) == STATE_READY {
// SAFETY: won't be overwritten for the lifetime of this reference
- Some(unsafe { (&*self.value.get()).assume_init_ref() })
+ Some(unsafe { (*self.value.get()).assume_init_ref() })
} else {
None
}
@@ -41,7 +42,7 @@ impl<T> OnceCell<T> {
match self.state.load(Ordering::Acquire) {
STATE_INIT => return None,
STATE_LOCKED => (), // continue
- STATE_READY => return Some(unsafe { (&*self.value.get()).assume_init_ref() }),
+ STATE_READY => return Some(unsafe { (*self.value.get()).assume_init_ref() }),
x => unreachable!("invalid state {x}"),
}
}
@@ -61,7 +62,7 @@ impl<T> OnceCell<T> {
self.state.store(STATE_READY, Ordering::Release);
return written;
}
- Err(STATE_READY) => return unsafe { (&*self.value.get()).assume_init_ref() },
+ Err(STATE_READY) => return unsafe { (*self.value.get()).assume_init_ref() },
Err(..) => (), // locked or spurious failure
}
}
@@ -82,7 +83,7 @@ impl<T> OnceCell<T> {
Ok(written)
}
// SAFETY: guaranteed to be initialized & protected by acquire ordering
- Err(STATE_READY) => return Ok(unsafe { (&*self.value.get()).assume_init_ref() }),
+ Err(STATE_READY) => return Ok(unsafe { (*self.value.get()).assume_init_ref() }),
Err(..) => Err(value), // locked or spurious failure
}
}
@@ -126,7 +127,7 @@ impl<T> OnceCell<T> {
};
// SAFETY: just in case AtomicU8 has a drop handler
unsafe {
- ptr::drop_in_place(&mut self.state as *mut _);
+ ptr::drop_in_place(std::ptr::addr_of_mut!(self.state));
}
std::mem::forget(self);
inner