From 2eb054eb0c813c1f543a4a2c17382007b7b03070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20M=C3=BCller?= Date: Fri, 8 May 2026 20:40:20 +0200 Subject: [PATCH] Refactor AppendGraph iterators into one RawIncidenceIterator --- src/models/append_graph.rs | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/models/append_graph.rs b/src/models/append_graph.rs index 02f6b5f..58d5ea8 100644 --- a/src/models/append_graph.rs +++ b/src/models/append_graph.rs @@ -23,35 +23,19 @@ struct IncidenceEntry { adjacent: Vertex, } -struct AdjacentVertexIterator<'a> { +struct RawIncidenceIterator<'a> { graph: &'a AppendGraph, incidence: Option, } -impl<'a> Iterator for AdjacentVertexIterator<'a> { - type Item = Vertex; - - fn next(&mut self) -> Option { - let current = self.incidence?; - let entry = &self.graph.incidences[current.0]; - self.incidence = entry.next; - Some(entry.adjacent) - } -} - -struct IncidenceIterator<'a> { - graph: &'a AppendGraph, - incidence: Option, -} - -impl<'a> Iterator for IncidenceIterator<'a> { +impl<'a> Iterator for RawIncidenceIterator<'a> { type Item = (Vertex, Incidence); fn next(&mut self) -> Option { let current = self.incidence?; let entry = &self.graph.incidences[current.0]; self.incidence = entry.next; - Some((entry.adjacent, current.normalize())) + Some((entry.adjacent, current)) } } @@ -129,10 +113,11 @@ impl GraphTopology for AppendGraph { } fn adjacent_vertices(&self, v: Self::Vertex) -> impl Iterator { - AdjacentVertexIterator { + RawIncidenceIterator { graph: self, incidence: self.vertices[v.0].first_incidence, } + .map(|(v, _)| v) } fn edges(&self) -> impl Iterator { @@ -140,10 +125,11 @@ impl GraphTopology for AppendGraph { } fn incidences(&self, v: Self::Vertex) -> impl Iterator { - IncidenceIterator { + RawIncidenceIterator { graph: self, incidence: self.vertices[v.0].first_incidence, } + .map(|(v, e)| (v, e.normalize())) } fn add_vertex(&mut self) -> Self::Vertex {