pub trait Fan<V> {
fn new(v0: V, v1: V, v2: V) -> Self;
fn push(&mut self, v: V);
}
impl<V> Fan<V> for Vec<V> {
fn new(v0: V, v1: V, v2: V) -> Self {
vec![v0, v1, v2]
}
fn push(&mut self, v: V) {
self.push(v)
}
}
pub trait Fans {
type Fan;
fn len(&self) -> usize;
fn truncate(&mut self, len: usize);
fn push(&mut self, fan: Self::Fan);
fn is_empty(&self) -> bool {
self.len() == 0
}
}
impl<F> Fans for Vec<F> {
type Fan = F;
fn len(&self) -> usize {
self.len()
}
fn truncate(&mut self, len: usize) {
self.truncate(len)
}
fn push(&mut self, fan: Self::Fan) {
self.push(fan)
}
}
impl<FS: Fans> Fans for &mut FS {
type Fan = FS::Fan;
fn len(&self) -> usize {
(**self).len()
}
fn truncate(&mut self, len: usize) {
(**self).truncate(len)
}
fn push(&mut self, fan: Self::Fan) {
(**self).push(fan)
}
}