use std::sync::Arc;
use std::sync::atomic::{AtomicU64, Ordering};
use crate::timing_wheel::state::TimeoutState;
#[derive(Debug)]
pub(crate) struct Entry {
id: u64,
deadline_ms: AtomicU64,
state: Arc<TimeoutState>,
}
impl Entry {
pub(crate) fn new(id: u64, deadline_ms: u64, state: Arc<TimeoutState>) -> Self {
Self {
id,
deadline_ms: AtomicU64::new(deadline_ms),
state,
}
}
pub(crate) fn id(&self) -> u64 {
self.id
}
pub(crate) fn deadline_ms(&self) -> u64 {
self.deadline_ms.load(Ordering::Acquire)
}
pub(crate) fn set_deadline_ms(&self, deadline_ms: u64) {
self.deadline_ms.store(deadline_ms, Ordering::Release);
}
pub(crate) fn state(&self) -> &Arc<TimeoutState> {
&self.state
}
}