use std::marker::PhantomData;
use std::sync::atomic::AtomicBool;
use std::sync::atomic::Ordering;
pub mod rwlock;
mod var_level_map;
pub use var_level_map::VarLevelMap;
pub type Invariant<'id> = PhantomData<fn(&'id ()) -> &'id ()>;
pub struct TryLock(AtomicBool);
impl TryLock {
#[inline(always)]
pub const fn new() -> Self {
Self(AtomicBool::new(false))
}
#[inline(always)]
pub fn try_lock(&self) -> bool {
!self.0.swap(true, Ordering::Acquire)
}
#[inline(always)]
pub fn unlock(&self) {
self.0.store(false, Ordering::Release);
}
}