Initial release #1
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user