audir 0.1.0

Low-level audio library
Documentation
#![allow(unused)]

use std::ops::{Deref, DerefMut};

pub type RawHandle = u64;

#[repr(transparent)]
#[derive(Debug, PartialEq, Eq)]
pub struct Handle<T>(*mut T);

impl<T> Handle<T> {
    pub fn new(v: T) -> Self {
        let handle = Box::new(v);
        Handle(Box::into_raw(handle))
    }

    pub fn raw(self) -> RawHandle {
        self.0 as _
    }

    pub fn from_raw(handle: RawHandle) -> Self {
        Handle(handle as _)
    }
}

impl<T> Copy for Handle<T> {}

impl<T> Clone for Handle<T> {
    fn clone(&self) -> Self {
        Handle(self.0)
    }
}

impl<T> Deref for Handle<T> {
    type Target = T;
    fn deref(&self) -> &Self::Target {
        unsafe { &*self.0 }
    }
}

impl<T> DerefMut for Handle<T> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        unsafe { &mut *self.0 }
    }
}