conspire/geometry/mesh/connectivity/iter/
mod.rs1use 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}