pub trait Edges<T, Id> {
fn iter_edges(&self) -> impl Iterator<Item = ((Id, Id), T)>;
}
pub type EdgeVec<T, Id> = Vec<((Id, Id), T)>;
impl<T: Clone, Id: Clone> Edges<T, Id> for EdgeVec<T, Id> {
fn iter_edges(&self) -> impl Iterator<Item = ((Id, Id), T)> {
self.iter().cloned()
}
}
pub type EdgeBTreeMap<T, Id> = std::collections::BTreeMap<(Id, Id), T>;
impl<T: Clone, Id: Clone> Edges<T, Id> for EdgeBTreeMap<T, Id> {
fn iter_edges(&self) -> impl Iterator<Item = ((Id, Id), T)> {
self.iter()
.map(|(edge, weight)| (edge.clone(), weight.clone()))
}
}
pub type EdgeHashMap<T, Id> = std::collections::HashMap<(Id, Id), T>;
impl<T: Clone, Id: Clone> Edges<T, Id> for EdgeHashMap<T, Id> {
fn iter_edges(&self) -> impl Iterator<Item = ((Id, Id), T)> {
self.iter()
.map(|(edge, weight)| (edge.clone(), weight.clone()))
}
}