pub mod adjacency_list; pub mod shortest_path; pub trait WheightedGraph: Sized { type Node; fn num_edges(&self, node: &Self::Node) -> usize { self.edge_iter(node).count() } fn edge(&self, node: &Self::Node, num: usize) -> Option<(Self::Node, f64)>; fn edge_iter<'a, 'b>(&'a self, node: &'b Self::Node) -> WheightedGraphEdgeIter<'a, 'b, Self> { WheightedGraphEdgeIter::new(self, node) } } pub struct WheightedGraphEdgeIter<'a, 'b, G> where G: WheightedGraph, { graph: &'a G, node: &'b G::Node, count: usize, } impl<'a, 'b, G> WheightedGraphEdgeIter<'a, 'b, G> where G: WheightedGraph, { pub fn new(graph: &'a G, node: &'b G::Node) -> Self { Self { graph, node, count: 0, } } } impl<'a, 'b, G> Iterator for WheightedGraphEdgeIter<'a, 'b, G> where G: WheightedGraph, { type Item = (G::Node, f64); fn next(&mut self) -> Option { self.count += 1; self.graph.edge(self.node, self.count - 1) } }