878: Minor simplifications for `Forever` r=Dirbaio a=GrantM11235



Co-authored-by: Grant Miller <GrantM11235@gmail.com>
This commit is contained in:
bors[bot] 2022-07-27 07:06:23 +00:00 committed by GitHub
commit c0496f8bbe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -52,20 +52,7 @@ impl<T> Forever<T> {
#[inline(always)]
#[allow(clippy::mut_from_ref)]
pub fn put(&'static self, val: T) -> &'static mut T {
if self
.used
.compare_exchange(false, true, Ordering::Relaxed, Ordering::Relaxed)
.is_err()
{
panic!("Forever::put() called multiple times");
}
unsafe {
let p = self.t.get();
let p = (&mut *p).as_mut_ptr();
p.write(val);
&mut *p
}
self.put_with(|| val)
}
/// Store the closure return value in this `Forever`, returning a mutable reference to it.
@ -87,12 +74,8 @@ impl<T> Forever<T> {
panic!("Forever.put() called multiple times");
}
unsafe {
let p = self.t.get();
let p = (&mut *p).as_mut_ptr();
p.write(val());
&mut *p
}
let p: &'static mut MaybeUninit<T> = unsafe { &mut *self.t.get() };
p.write(val())
}
/// Unsafely get a mutable reference to the contents of this Forever.
@ -106,8 +89,7 @@ impl<T> Forever<T> {
#[inline(always)]
#[allow(clippy::mut_from_ref)]
pub unsafe fn steal(&self) -> &mut T {
let p = self.t.get();
let p = (&mut *p).as_mut_ptr();
&mut *p
let p: &mut MaybeUninit<T> = &mut *self.t.get();
p.assume_init_mut()
}
}