use crate::monotonic::internal::manual_waiter_registry::ManualWaiterRegistry;
use std::{
task::{
Context,
Poll,
Waker,
},
time::Duration,
};
pub struct LoomManualWaiterRegistry {
inner: ManualWaiterRegistry,
}
impl LoomManualWaiterRegistry {
#[must_use]
#[inline]
pub fn new() -> Self {
Self {
inner: ManualWaiterRegistry::new(),
}
}
#[must_use]
#[inline(always)]
pub fn count(&self) -> usize {
self.inner.count()
}
#[must_use]
#[inline(always)]
pub fn register_timer(&mut self, deadline: Duration) -> u64 {
self.inner.register_timer(deadline)
}
#[inline(always)]
pub fn unregister_timer(
&mut self,
waiter_id: u64,
) -> Option<Option<Waker>> {
self.inner.unregister_timer(waiter_id)
}
#[must_use]
#[inline(always)]
pub fn register_deadline_observer(&mut self) -> u64 {
self.inner.register_deadline_observer()
}
#[inline(always)]
pub fn unregister_observer(&mut self, observer_id: u64) -> Option<Waker> {
self.inner.unregister_observer(observer_id)
}
#[must_use = "the poll state and detached waker must both be handled"]
#[inline(always)]
pub fn poll_timer(
&mut self,
waiter_id: u64,
elapsed: Duration,
context: &Context<'_>,
) -> (Poll<()>, Option<Waker>) {
self.inner.poll_timer(waiter_id, elapsed, context)
}
#[must_use = "the poll state and detached waker must both be handled"]
#[inline(always)]
pub fn poll_deadline_observer(
&mut self,
observer_id: u64,
elapsed: Duration,
context: &Context<'_>,
) -> (Poll<Duration>, Option<Waker>) {
self.inner
.poll_deadline_observer(observer_id, elapsed, context)
}
#[inline(always)]
pub fn take_due_timer_wakers(&mut self, elapsed: Duration) -> Vec<Waker> {
self.inner.take_due_timer_wakers(elapsed)
}
#[inline(always)]
pub fn reached_observer_wakers(&mut self, elapsed: Duration) -> Vec<Waker> {
self.inner.reached_observer_wakers(elapsed)
}
}