use super::*;
pub struct Counter {
retry_times: usize,
}
impl Counter {
pub fn new(retry_times: usize) -> Self {
Self { retry_times }
}
}
impl Waiter for Counter {
#[inline]
fn start(&self) -> impl WaiterStatus {
CounterInstance {
count: 0,
waiter: self,
}
}
}
pub struct CounterInstance<'a> {
count: usize,
waiter: &'a Counter,
}
impl<'a> WaiterStatus for CounterInstance<'a> {
#[inline]
fn timeout(&mut self) -> bool {
if self.waiter.retry_times == usize::MAX {
return false;
}
if self.count < self.waiter.retry_times {
self.count = self.count.wrapping_add(1);
false
} else {
true
}
}
#[inline(always)]
fn restart(&mut self) {
self.count = 0;
}
}