Rename append_graph::Incidence to Edge to unify public naming

This commit is contained in:
2026-07-06 17:52:42 +02:00
parent e3a24894f6
commit 266dee783b
+13 -13
View File
@@ -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),