#[cfg(not(feature = "sequencer"))]
pub use std::cell::RefCell as Locked;
#[cfg(not(feature = "sequencer"))]
pub type LockGuard<'a, T> = std::cell::Ref<'a, T>;
#[cfg(not(feature = "sequencer"))]
pub type LockGuardMut<'a, T> = std::cell::RefMut<'a, T>;
#[cfg(feature = "sequencer")]
pub type Locked<T> = std::sync::Arc<std::sync::RwLock<T>>;
#[cfg(feature = "sequencer")]
#[allow(dead_code)]
pub type LockGuard<'a, T> = std::sync::RwLockReadGuard<'a, T>;
#[cfg(feature = "sequencer")]
#[allow(dead_code)]
pub type LockGuardMut<'a, T> = std::sync::RwLockWriteGuard<'a, T>;
#[inline(always)]
#[must_use]
#[allow(dead_code)]
pub fn locked_read<T>(value: &Locked<T>) -> LockGuard<T> {
#[cfg(not(feature = "sequencer"))]
return value.borrow();
#[cfg(feature = "sequencer")]
return value.read().unwrap();
}
#[inline(always)]
#[must_use]
#[allow(dead_code)]
pub fn locked_write<T>(value: &Locked<T>) -> LockGuardMut<T> {
#[cfg(not(feature = "sequencer"))]
return value.borrow_mut();
#[cfg(feature = "sequencer")]
return value.write().unwrap();
}
pub fn new_locked<T>(value: T) -> Locked<T> {
#[cfg(not(feature = "sequencer"))]
return std::cell::RefCell::new(value);
#[cfg(feature = "sequencer")]
return Locked::new(std::sync::RwLock::new(value));
}