Rename append_graph::Incidence to Edge to unify public naming
This commit is contained in:
+13
-13
@@ -5,9 +5,9 @@ use crate::traits::{GraphTopology, IncidenceCursor};
|
|||||||
pub struct Vertex(usize);
|
pub struct Vertex(usize);
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
||||||
pub struct Incidence(usize);
|
pub struct Edge(usize);
|
||||||
|
|
||||||
impl Incidence {
|
impl Edge {
|
||||||
fn normalize(&self) -> Self {
|
fn normalize(&self) -> Self {
|
||||||
Self(self.0 & !1)
|
Self(self.0 & !1)
|
||||||
}
|
}
|
||||||
@@ -15,22 +15,22 @@ impl Incidence {
|
|||||||
|
|
||||||
struct VertexIncidenceHeader {
|
struct VertexIncidenceHeader {
|
||||||
incidence_count: usize,
|
incidence_count: usize,
|
||||||
first_incidence: Option<Incidence>,
|
first_incidence: Option<Edge>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
struct IncidenceEntry {
|
struct IncidenceEntry {
|
||||||
next: Option<Incidence>,
|
next: Option<Edge>,
|
||||||
adjacent: Vertex,
|
adjacent: Vertex,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub struct AppendGraphIncidenceCursor {
|
pub struct AppendGraphIncidenceCursor {
|
||||||
incidence: Option<Incidence>,
|
incidence: Option<Edge>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl IncidenceCursor<AppendGraph> for AppendGraphIncidenceCursor {
|
impl IncidenceCursor<AppendGraph> for AppendGraphIncidenceCursor {
|
||||||
fn next(&mut self, graph: &AppendGraph) -> Option<(Vertex, Incidence)> {
|
fn next(&mut self, graph: &AppendGraph) -> Option<(Vertex, Edge)> {
|
||||||
graph.step_incidence(&mut self.incidence)
|
graph.step_incidence(&mut self.incidence)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,15 +56,15 @@ impl AppendGraph {
|
|||||||
adjacent: v2,
|
adjacent: v2,
|
||||||
});
|
});
|
||||||
self.vertices[v1.0].incidence_count += 1;
|
self.vertices[v1.0].incidence_count += 1;
|
||||||
self.vertices[v1.0].first_incidence = Some(Incidence(self.incidences.len() - 1));
|
self.vertices[v1.0].first_incidence = Some(Edge(self.incidences.len() - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn raw_incidences(&self, v: Vertex) -> impl Iterator<Item = (Vertex, Incidence)> {
|
fn raw_incidences(&self, v: Vertex) -> impl Iterator<Item = (Vertex, Edge)> {
|
||||||
let mut incidence = self.vertices[v.0].first_incidence;
|
let mut incidence = self.vertices[v.0].first_incidence;
|
||||||
std::iter::from_fn(move || self.step_incidence(&mut incidence))
|
std::iter::from_fn(move || self.step_incidence(&mut incidence))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn step_incidence(&self, incidence: &mut Option<Incidence>) -> Option<(Vertex, Incidence)> {
|
fn step_incidence(&self, incidence: &mut Option<Edge>) -> Option<(Vertex, Edge)> {
|
||||||
let current = (*incidence)?;
|
let current = (*incidence)?;
|
||||||
let entry = self.incidences[current.0];
|
let entry = self.incidences[current.0];
|
||||||
*incidence = entry.next;
|
*incidence = entry.next;
|
||||||
@@ -80,7 +80,7 @@ impl Default for AppendGraph {
|
|||||||
|
|
||||||
impl GraphTopology for AppendGraph {
|
impl GraphTopology for AppendGraph {
|
||||||
type Vertex = Vertex;
|
type Vertex = Vertex;
|
||||||
type Edge = Incidence;
|
type Edge = Edge;
|
||||||
type IncidenceCursor = AppendGraphIncidenceCursor;
|
type IncidenceCursor = AppendGraphIncidenceCursor;
|
||||||
|
|
||||||
fn vertex_count(&self) -> usize {
|
fn vertex_count(&self) -> usize {
|
||||||
@@ -130,7 +130,7 @@ impl GraphTopology for AppendGraph {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn edges(&self) -> impl Iterator<Item = Self::Edge> {
|
fn edges(&self) -> impl Iterator<Item = Self::Edge> {
|
||||||
(0..self.incidences.len()).step_by(2).map(Incidence)
|
(0..self.incidences.len()).step_by(2).map(Edge)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn incident_edges(&self, v: Self::Vertex) -> impl Iterator<Item = Self::Edge> {
|
fn incident_edges(&self, v: Self::Vertex) -> impl Iterator<Item = Self::Edge> {
|
||||||
@@ -158,7 +158,7 @@ impl GraphTopology for AppendGraph {
|
|||||||
fn add_edge(&mut self, v1: Self::Vertex, v2: Self::Vertex) -> Self::Edge {
|
fn add_edge(&mut self, v1: Self::Vertex, v2: Self::Vertex) -> Self::Edge {
|
||||||
self.add_incidence(v1, v2);
|
self.add_incidence(v1, v2);
|
||||||
self.add_incidence(v2, v1);
|
self.add_incidence(v2, v1);
|
||||||
Incidence(self.incidences.len() - 2)
|
Edge(self.incidences.len() - 2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +175,7 @@ mod tests {
|
|||||||
let v1 = graph.add_vertex();
|
let v1 = graph.add_vertex();
|
||||||
let v2 = graph.add_vertex();
|
let v2 = graph.add_vertex();
|
||||||
let e = graph.add_edge(v1, v2);
|
let e = graph.add_edge(v1, v2);
|
||||||
let f = Incidence(e.0 + 1);
|
let f = Edge(e.0 + 1);
|
||||||
let (u1, u2) = graph.incident_vertices(f);
|
let (u1, u2) = graph.incident_vertices(f);
|
||||||
assert!(
|
assert!(
|
||||||
(u1 == v1 && u2 == v2) || (u1 == v2 && u2 == v1),
|
(u1 == v1 && u2 == v2) || (u1 == v2 && u2 == v1),
|
||||||
|
|||||||
Reference in New Issue
Block a user