use crate::{interest::Interest, token::Token};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Event {
token: Token,
readiness: Interest,
}
impl Event {
pub const fn new(token: Token, readiness: Interest) -> Self {
Self { token, readiness }
}
pub const fn token(&self) -> Token {
self.token
}
pub const fn readiness(&self) -> Interest {
self.readiness
}
}
#[derive(Debug, Default, Clone)]
pub struct Events {
entries: Vec<Event>,
}
impl Events {
pub fn new() -> Self {
Self { entries: Vec::new() }
}
pub fn with_capacity(capacity: usize) -> Self {
Self {
entries: Vec::with_capacity(capacity),
}
}
pub fn len(&self) -> usize {
self.entries.len()
}
pub fn is_empty(&self) -> bool {
self.entries.is_empty()
}
pub fn clear(&mut self) {
self.entries.clear();
}
pub fn iter(&self) -> impl Iterator<Item = &Event> {
self.entries.iter()
}
pub fn push(&mut self, event: Event) {
self.entries.push(event);
}
}
impl IntoIterator for Events {
type Item = Event;
type IntoIter = std::vec::IntoIter<Event>;
fn into_iter(self) -> Self::IntoIter {
self.entries.into_iter()
}
}
impl<'a> IntoIterator for &'a Events {
type Item = &'a Event;
type IntoIter = std::slice::Iter<'a, Event>;
fn into_iter(self) -> Self::IntoIter {
self.entries.iter()
}
}