use core::cell::UnsafeCell;
pub struct UnsafeCellWrap<T> {
inner: UnsafeCell<T>,
}
impl<T> UnsafeCellWrap<T> {
pub const fn new(value: T) -> Self {
UnsafeCellWrap {
inner: UnsafeCell::new(value),
}
}
pub fn get(&self) -> &T {
unsafe { &*self.inner.get() }
}
pub fn get_mut(&self) -> &mut T {
unsafe { &mut *self.inner.get() }
}
pub fn set(&self, value: T) {
unsafe {
*self.inner.get() = value;
}
}
}
// 为 UnsafeCellWrap 实现 Sync
unsafe impl<T> Sync for UnsafeCellWrap<T> {}