snark_tool/graph/
graph.rs1use 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 fn new() -> Self;
27 fn with_capacity(vertices: usize, edges: usize) -> Self;
28 fn with_vertices_capacity(vertices: usize) -> Self;
29}