From 340fde213336ab85e76e7e2e863e5f291739cab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20M=C3=BCller?= Date: Wed, 13 May 2026 10:32:37 +0200 Subject: [PATCH] Add Graph::raw_incidences() iterator as a wrapper for step_incidence() --- src/models/graph.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/models/graph.rs b/src/models/graph.rs index c05567e..70372b3 100644 --- a/src/models/graph.rs +++ b/src/models/graph.rs @@ -98,8 +98,8 @@ impl Graph { vertex_header.first_incidence = next; } else { let graph: &Graph = self; - let mut incidence = self.vertices[source_vertex].first_incidence; - let (_, previous) = std::iter::from_fn(move || graph.step_incidence(&mut incidence)) + let (_, previous) = self + .raw_incidences(source_vertex) .find(|(_, f)| { graph.incidences[*f] .next @@ -110,6 +110,11 @@ impl Graph { } } + fn raw_incidences(&self, v: Vertex) -> impl Iterator { + let mut incidence = self.vertices[v].first_incidence; + std::iter::from_fn(move || self.step_incidence(&mut incidence)) + } + fn step_incidence(&self, incidence: &mut Option) -> Option<(VertexSlot, Edge)> { let current = (*incidence)?; let e = self.incidences.get_idx(current.0).unwrap(); @@ -171,8 +176,7 @@ impl GraphTopology for Graph { } fn adjacent_vertices(&self, v: Self::Vertex) -> impl Iterator { - let mut incidence = self.vertices[v].first_incidence; - std::iter::from_fn(move || self.step_incidence(&mut incidence)) + self.raw_incidences(v) .map(|(vs, _)| self.vertices.get_idx(vs.0).unwrap()) } @@ -197,8 +201,7 @@ impl GraphTopology for Graph { } fn incidences(&self, v: Self::Vertex) -> impl Iterator { - let mut incidence = self.vertices[v].first_incidence; - std::iter::from_fn(move || self.step_incidence(&mut incidence)) + self.raw_incidences(v) .map(|(vs, e)| (self.vertices.get_idx(vs.0).unwrap(), self.normalize_edge(e))) }