use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
#[derive(Clone)]
pub struct InterruptManager {
interrupted: Arc<AtomicBool>,
}
impl InterruptManager {
pub fn new() -> Self {
Self {
interrupted: Arc::new(AtomicBool::new(false)),
}
}
pub fn interrupt(&self) {
self.interrupted.store(true, Ordering::Release);
}
pub fn clear(&self) {
self.interrupted.store(false, Ordering::Release);
}
pub fn is_interrupted(&self) -> bool {
self.interrupted.load(Ordering::Acquire)
}
}
impl Default for InterruptManager {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
#[path = "interrupt_tests.rs"]
mod tests;