pub(crate) trait VectorExtensions<T> {
fn index_of(&self, value: &T) -> Option<usize> where T: PartialEq;
fn index_of_from(&self, value: &T, start_index: usize) -> Option<usize> where T: PartialEq;
fn remove_equals(&mut self, value: &T) -> bool where T: PartialEq;
}
impl<T> VectorExtensions<T> for Vec<T> {
fn index_of(&self, value: &T) -> Option<usize> where T: PartialEq {
for i in 0..self.len() {
if self[i] == *value {
return Some(i);
}
}
None
}
fn index_of_from(&self, value: &T, start_index: usize) -> Option<usize> where T: PartialEq {
if start_index >= self.len() {
return None;
}
for i in start_index..self.len() {
if self[i] == *value {
return Some(i);
}
}
None
}
fn remove_equals(&mut self, value: &T) -> bool where T: PartialEq {
let i = self.index_of(value);
if let Some(i) = i {
self.remove(i);
true
} else {
false
}
}
}