devotee 0.2.0-beta.32

Visualization engine
Documentation
#[derive(Clone, Copy, Debug)]
pub struct AngleIterator<'a, T> {
    index: usize,
    vertices: &'a [T],
}

impl<'a, T> AngleIterator<'a, T> {
    pub fn new(vertices: &'a [T]) -> Self {
        let index = 0;
        Self { index, vertices }
    }
}

impl<'a, T> Iterator for AngleIterator<'a, T> {
    type Item = (&'a T, &'a T, &'a T);

    fn next(&mut self) -> Option<Self::Item> {
        let index = self.index;
        self.index += 1;
        match index {
            i if i < self.vertices.len() - 2 => Some((
                &self.vertices[i],
                &self.vertices[i + 1],
                &self.vertices[i + 2],
            )),
            i if i == self.vertices.len() - 2 => {
                Some((&self.vertices[i], &self.vertices[i + 1], &self.vertices[0]))
            }
            i if i == self.vertices.len() - 1 => {
                Some((&self.vertices[i], &self.vertices[0], &self.vertices[1]))
            }
            _ => None,
        }
    }
}