use std::sync::atomic::{AtomicU64, Ordering};
pub(super) struct SinkCounters {
window: AtomicU64,
total: AtomicU64,
}
impl SinkCounters {
pub(super) fn new() -> SinkCounters {
SinkCounters {
window: AtomicU64::new(0),
total: AtomicU64::new(0),
}
}
pub(super) fn lose(&self, n: u64) {
self.window.fetch_add(n, Ordering::Relaxed);
self.total.fetch_add(n, Ordering::Relaxed);
}
pub(super) fn take_window(&self) -> u64 {
self.window.swap(0, Ordering::Relaxed)
}
pub(super) fn total(&self) -> u64 {
self.total.load(Ordering::Relaxed)
}
}