moon-driver-utils 0.1.0

Windows Kernel Utils
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> {}