use core::cell::UnsafeCell;
#[derive(Debug)]
pub struct Local<T> {
data: UnsafeCell<T>,
}
unsafe impl<T> Sync for Local<T> {}
impl<T> Local<T> {
pub const fn new(data: T) -> Self {
let data = UnsafeCell::new(data);
Self { data }
}
#[inline(always)]
pub fn with<R>(&'static self, f: impl FnOnce(&mut T) -> R) -> R {
let data = unsafe { &mut *self.data.get() };
f(data)
}
}