use crate::{platform::prelude::*, Time};
#[derive(Clone, Default, Debug, PartialEq, Eq)]
pub struct Comparisons(Vec<(Box<str>, Time)>);
impl Comparisons {
fn index_of(&self, comparison: &str) -> Option<usize> {
Some(
self.0
.iter()
.enumerate()
.find(|(_, (c, _))| &**c == comparison)?
.0,
)
}
pub fn get(&self, comparison: &str) -> Option<Time> {
Some(self.0[self.index_of(comparison)?].1)
}
pub fn get_or_insert_default(&mut self, comparison: &str) -> &mut Time {
if let Some(index) = self.index_of(comparison) {
&mut self.0[index].1
} else {
self.0.push((comparison.into(), Time::default()));
&mut self.0.last_mut().unwrap().1
}
}
pub fn set(&mut self, comparison: &str, time: Time) {
*self.get_or_insert_default(comparison) = time;
}
pub fn remove(&mut self, comparison: &str) -> Option<Time> {
let index = self.index_of(comparison)?;
let (_, time) = self.0.remove(index);
Some(time)
}
pub fn clear(&mut self) {
self.0.clear();
}
pub fn iter(&self) -> impl Iterator<Item = &(Box<str>, Time)> + '_ {
self.0.iter()
}
pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut (Box<str>, Time)> + '_ {
self.0.iter_mut()
}
}