triangulate 0.2.0

Subdivides polygons into equivalent triangles
Documentation
use std::marker::PhantomData;

use crate::List;

pub(crate) struct GenericList<L: List<V>, V> {
    list: L,
    initial_vert_count: usize,
    _phantom: PhantomData<V>,
}

impl<L: List<V>, V> GenericList<L, V> {
    pub fn new(list: L) -> Self {
        let initial_vert_count = list.len();
        Self {
            list,
            initial_vert_count,
            _phantom: PhantomData,
        }
    }

    pub fn new_triangle(&mut self, v0: V, v1: V, v2: V) {
        self.list.push(v0, v1, v2);
    }

    pub fn build(self) -> L {
        self.list
    }

    pub fn fail(mut self) {
        self.list.truncate(self.initial_vert_count);
    }
}