Refactor AppendGraph iterators into one RawIncidenceIterator

This commit is contained in:
2026-05-08 20:40:20 +02:00
parent 0f5f0d67d2
commit 2eb054eb0c
+7 -21
View File
@@ -23,35 +23,19 @@ struct IncidenceEntry {
adjacent: Vertex,
}
struct AdjacentVertexIterator<'a> {
struct RawIncidenceIterator<'a> {
graph: &'a AppendGraph,
incidence: Option<Incidence>,
}
impl<'a> Iterator for AdjacentVertexIterator<'a> {
type Item = Vertex;
fn next(&mut self) -> Option<Self::Item> {
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<Incidence>,
}
impl<'a> Iterator for IncidenceIterator<'a> {
impl<'a> Iterator for RawIncidenceIterator<'a> {
type Item = (Vertex, Incidence);
fn next(&mut self) -> Option<Self::Item> {
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<Item = Self::Vertex> {
AdjacentVertexIterator {
RawIncidenceIterator {
graph: self,
incidence: self.vertices[v.0].first_incidence,
}
.map(|(v, _)| v)
}
fn edges(&self) -> impl Iterator<Item = Self::Edge> {
@@ -140,10 +125,11 @@ impl GraphTopology for AppendGraph {
}
fn incidences(&self, v: Self::Vertex) -> impl Iterator<Item = (Self::Vertex, Self::Edge)> {
IncidenceIterator {
RawIncidenceIterator {
graph: self,
incidence: self.vertices[v.0].first_incidence,
}
.map(|(v, e)| (v, e.normalize()))
}
fn add_vertex(&mut self) -> Self::Vertex {