#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct RangeChange<T> {
items: Vec<T>,
index: Option<usize>,
}
impl<T> Default for RangeChange<T> {
fn default() -> Self {
Self { items: Vec::new(), index: None }
}
}
impl<T> RangeChange<T> {
pub fn new(items: Vec<T>, index: Option<usize>) -> Self {
Self { items, index }
}
pub fn count(&self) -> usize {
self.items.len()
}
pub fn index(&self) -> Option<usize> {
self.index
}
pub fn items(&self) -> &[T] {
&self.items
}
pub fn iter(&self) -> std::slice::Iter<'_, T> {
self.items.iter()
}
pub fn add(&mut self, item: T) {
self.items.push(item);
}
pub fn insert(&mut self, index: usize, item: T) {
self.items.insert(index, item);
}
pub fn set_starting_index(&mut self, index: Option<usize>) {
self.index = index;
}
}
impl<'a, T> IntoIterator for &'a RangeChange<T> {
type Item = &'a T;
type IntoIter = std::slice::Iter<'a, T>;
fn into_iter(self) -> Self::IntoIter {
self.items.iter()
}
}