use std::sync::{Arc, Mutex, MutexGuard};
pub struct CradleMutex<T>(pub Arc<Mutex<T>>);
impl<T> CradleMutex<T> {
pub fn new(t: T) -> CradleMutex<T> {
CradleMutex(Arc::new(Mutex::new(t)))
}
pub fn new_from_arc(arc: Arc<Mutex<T>>) -> CradleMutex<T> {
CradleMutex(arc)
}
pub fn lock(&self) -> MutexGuard<'_, T> {
self.0.lock().unwrap()
}
pub fn to_arc(&self) -> Arc<Mutex<T>> {
self.0.clone()
}
pub fn to_raw_ptr(&self) -> *const std::ffi::c_void {
Arc::into_raw(self.0.clone()) as *const std::ffi::c_void
}
}
impl<T: Default> Default for CradleMutex<T> {
fn default() -> CradleMutex<T> {
CradleMutex(Arc::new(Mutex::new(T::default())))
}
}
impl<T> Clone for CradleMutex<T> {
fn clone(&self) -> Self {
CradleMutex(self.0.clone())
}
}