use crate::*;
use std::sync::{
atomic::{AtomicBool, Ordering},
Arc,
};
pub struct FakeLock {
val: Arc<AtomicBool>,
}
impl Clone for FakeLock {
fn clone(&self) -> Self {
FakeLock {
val: self.val.clone(),
}
}
}
impl Default for FakeLock {
fn default() -> Self {
FakeLock::new(false)
}
}
impl FakeLock {
pub fn new(is_locked: bool) -> Self {
FakeLock {
val: Arc::new(is_locked.into()),
}
}
}
impl Lock for FakeLock {
fn status(&self) -> SimpleLockResult<LockStatus> {
if self.val.load(Ordering::Relaxed) {
Ok(LockStatus::Mine)
} else {
Ok(LockStatus::Open)
}
}
fn lock(&mut self) -> SimpleLockResult<()> {
self.val.store(true, Ordering::Relaxed);
Ok(())
}
fn unlock(&mut self) -> SimpleLockResult<()> {
self.val.store(false, Ordering::Relaxed);
Ok(())
}
}