use std::ops::Deref; pub struct VecSet { vec: Vec, } impl Default for VecSet { fn default() -> Self { Self { vec: vec![] } } } impl Deref for VecSet { type Target = [T]; fn deref(&self) -> &Self::Target { &self.vec } } impl VecSet { pub fn clear(&mut self) { self.vec.clear(); } } impl VecSet { pub fn insert(&mut self, val: T) -> bool { if self.vec.contains(&val) { return false; } self.vec.push(val); true } pub fn remove(&mut self, val: &T) -> bool { for i in 0..self.vec.len() { if self.vec[i] == *val { self.vec.swap_remove(i); return true; } } false } pub fn pop(&mut self) -> Option { self.vec.pop() } pub fn extend(&mut self, vals: &[T]) where T: Copy, { for v in vals.iter().copied() { self.insert(v); } } }