sbz-switch 4.1.0

Utility for changing Sound Blaster parameters on Windows
Documentation
use std::cell::UnsafeCell;

// this is like lazy_init, but not Send or Sync
pub(crate) struct Lazy<T> {
    inner: UnsafeCell<Option<T>>,
}

impl<T> Lazy<T> {
    pub fn new() -> Self {
        Lazy {
            inner: UnsafeCell::new(None),
        }
    }

    pub fn get_or_create<C: FnOnce() -> T>(&self, create: C) -> &T {
        unsafe {
            if let Some(ref value) = *self.inner.get() {
                return value;
            }
            *self.inner.get() = Some(create());
            (*self.inner.get()).as_ref().unwrap()
        }
    }
}