triangulate/outputs/
list.rs

1/// A list of triangles represented as triplets of vertices of type `V`
2pub trait List<V> {
3    /// Add a new triangle to the list
4    fn push(&mut self, v0: V, v1: V, v2: V);
5
6    /// The number of triangles in the list
7    fn len(&self) -> usize;
8
9    /// Remove newly added triangles until there are only `len` remaining
10    fn truncate(&mut self, len: usize);
11
12    /// Returns `true` if the collection contains no triangles
13    fn is_empty(&self) -> bool {
14        self.len() == 0
15    }
16}
17
18impl<V> List<V> for Vec<V> {
19    fn push(&mut self, v0: V, v1: V, v2: V) {
20        self.push(v0);
21        self.push(v1);
22        self.push(v2);
23    }
24
25    fn len(&self) -> usize {
26        self.len() / 3
27    }
28
29    fn truncate(&mut self, len: usize) {
30        self.truncate(len * 3)
31    }
32}
33
34impl<V> List<V> for Vec<[V; 3]> {
35    fn push(&mut self, v0: V, v1: V, v2: V) {
36        self.push([v0, v1, v2]);
37    }
38
39    fn len(&self) -> usize {
40        self.len()
41    }
42
43    fn truncate(&mut self, len: usize) {
44        self.truncate(len)
45    }
46}
47
48impl<V> List<V> for Vec<(V, V, V)> {
49    fn push(&mut self, v0: V, v1: V, v2: V) {
50        self.push((v0, v1, v2));
51    }
52
53    fn len(&self) -> usize {
54        self.len()
55    }
56
57    fn truncate(&mut self, len: usize) {
58        self.truncate(len)
59    }
60}
61
62impl<V, L: List<V>> List<V> for &mut L {
63    fn push(&mut self, v0: V, v1: V, v2: V) {
64        (**self).push(v0, v1, v2)
65    }
66
67    fn len(&self) -> usize {
68        (**self).len()
69    }
70
71    fn truncate(&mut self, len: usize) {
72        (**self).truncate(len)
73    }
74}