diff --git a/src/models.rs b/src/models.rs index 9aeb4e5..23a0809 100644 --- a/src/models.rs +++ b/src/models.rs @@ -10,7 +10,7 @@ impl From for usize { } #[derive(Copy, Clone, PartialEq, Eq)] -struct Incidence(usize); +pub struct Incidence(usize); struct VertexIncidenceHeader { incidence_count: usize, @@ -69,6 +69,8 @@ impl Graph { impl GraphTopology for Graph { type Vertex = Vertex; + type Edge = Incidence; + fn vertex_count(&self) -> usize { self.vertices.len() } @@ -104,9 +106,10 @@ impl GraphTopology for Graph { Vertex(self.vertices.len() - 1) } - fn add_edge(&mut self, v1: Self::Vertex, v2: Self::Vertex) { + fn add_edge(&mut self, v1: Self::Vertex, v2: Self::Vertex) -> Self::Edge { self.add_incidence(v1, v2); self.add_incidence(v2, v1); + Incidence(self.incidences.len() - 2) } } diff --git a/src/traits.rs b/src/traits.rs index 8a06dec..d4de040 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -1,5 +1,6 @@ pub trait GraphTopology { type Vertex: Copy + Eq; + type Edge; fn vertex_count(&self) -> usize; fn edge_count(&self) -> usize; @@ -8,5 +9,5 @@ pub trait GraphTopology { fn vertices(&self) -> impl Iterator; fn neighbors(&self, v: Self::Vertex) -> impl Iterator; fn add_vertex(&mut self) -> Self::Vertex; - fn add_edge(&mut self, v1: Self::Vertex, v2: Self::Vertex); + fn add_edge(&mut self, v1: Self::Vertex, v2: Self::Vertex) -> Self::Edge; }