Skip to main content

conspire/geometry/mesh/connectivity/iter/
mod.rs

1use crate::geometry::mesh::Connectivity;
2use std::slice::Iter;
3
4pub enum ElementIter<'a> {
5    Hexahedral(Iter<'a, [usize; 8]>),
6    Polyhedral(Iter<'a, Vec<usize>>),
7    Polygonal(Iter<'a, Vec<usize>>),
8    Pyramidal(Iter<'a, [usize; 5]>),
9    Quadrilateral(Iter<'a, [usize; 4]>),
10    Tetrahedral(Iter<'a, [usize; 4]>),
11    Triangular(Iter<'a, [usize; 3]>),
12    Wedge(Iter<'a, [usize; 6]>),
13}
14
15impl<'a> Iterator for ElementIter<'a> {
16    type Item = &'a [usize];
17    fn next(&mut self) -> Option<Self::Item> {
18        match self {
19            ElementIter::Hexahedral(i) => i.next().map(|e| e.as_slice()),
20            ElementIter::Polyhedral(i) => i.next().map(|e| e.as_slice()),
21            ElementIter::Polygonal(i) => i.next().map(|e| e.as_slice()),
22            ElementIter::Pyramidal(i) => i.next().map(|e| e.as_slice()),
23            ElementIter::Quadrilateral(i) => i.next().map(|e| e.as_slice()),
24            ElementIter::Tetrahedral(i) => i.next().map(|e| e.as_slice()),
25            ElementIter::Triangular(i) => i.next().map(|e| e.as_slice()),
26            ElementIter::Wedge(i) => i.next().map(|e| e.as_slice()),
27        }
28    }
29}
30
31impl<'a> IntoIterator for &'a Connectivity {
32    type Item = &'a [usize];
33    type IntoIter = ElementIter<'a>;
34    fn into_iter(self) -> ElementIter<'a> {
35        match self {
36            Connectivity::Hexahedral(c) => ElementIter::Hexahedral(c.iter()),
37            Connectivity::Polyhedral(c) => ElementIter::Polyhedral(c.iter()),
38            Connectivity::Polygonal(c) => ElementIter::Polygonal(c.iter()),
39            Connectivity::Pyramidal(c) => ElementIter::Pyramidal(c.iter()),
40            Connectivity::Quadrilateral(c) => ElementIter::Quadrilateral(c.iter()),
41            Connectivity::Tetrahedral(c) => ElementIter::Tetrahedral(c.iter()),
42            Connectivity::Triangular(c) => ElementIter::Triangular(c.iter()),
43            Connectivity::Wedge(c) => ElementIter::Wedge(c.iter()),
44        }
45    }
46}