use alloc::rc::Rc;
use core::sync::atomic::{AtomicUsize, Ordering};
#[derive(Clone, Debug, Default)]
pub struct AtomicCounter {
inner: Rc<AtomicUsize>,
}
impl AtomicCounter {
pub fn new(val: usize) -> Self {
Self {
inner: Rc::new(AtomicUsize::new(val)),
}
}
pub fn inc(&self) -> usize {
self.inner.fetch_add(1, Ordering::SeqCst)
}
pub fn get(&self) -> usize {
self.inner.load(Ordering::SeqCst)
}
pub fn get_and_reset(&self) -> usize {
self.inner.swap(0, Ordering::SeqCst)
}
}