snark_tool/graph/
graph.rs

1use crate::graph::edge::Edge;
2use crate::graph::vertex::Vertex;
3
4pub trait Graph {
5    type V: Vertex;
6    type E: Edge;
7
8    fn size(&self) -> usize;
9    fn has_edge(&self, from: usize, to: usize) -> bool;
10
11    fn add_vertex(&mut self);
12    fn add_edge(&mut self, from: usize, to: usize);
13    fn remove_edge(&mut self, from: usize, to: usize);
14
15    fn remove_edges_of_vertex(&mut self, vertex_index: usize);
16    fn remove_vertex(&mut self, vertex_index: usize);
17    fn vertices<'a>(&'a self) -> Box<dyn Iterator<Item = &'a Self::V> + 'a>;
18
19    fn edges<'a>(&'a self) -> Box<dyn Iterator<Item = &'a Self::E> + 'a>;
20    fn edges_of_vertex<'a>(&'a self, vertex: usize) -> Box<dyn Iterator<Item = &'a Self::E> + 'a>;
21    fn neighbors_of_vertex(&self, vertex: usize) -> Vec<usize>;
22}
23
24pub trait GraphConstructor {
25    // CONSTRUCTORS
26    fn new() -> Self;
27    fn with_capacity(vertices: usize, edges: usize) -> Self;
28    fn with_vertices_capacity(vertices: usize) -> Self;
29}