use crate::DirectedEdge;
use std::{
cmp::{max, min},
ops::Range,
};
use crate::{DynamicEdge, UndirectedEdge};
use std::fmt::{Display, Formatter};
pub mod actions;
pub mod typed_edges;
mod simple;
pub mod get_iter;
pub mod mut_iter;
pub trait Edge: Display {
fn direction(&self) -> EdgeDirection;
fn lhs(&self) -> usize;
fn rhs(&self) -> usize;
fn max_index(&self) -> usize {
max(self.lhs(), self.rhs())
}
fn min_index(&self) -> usize {
min(self.lhs(), self.rhs())
}
fn as_dynamic(&self) -> DynamicEdge {
DynamicEdge { bidi: self.direction(), from: self.lhs(), goto: self.rhs() }
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EdgeDirection {
Disconnect,
TwoWay,
Forward,
Reverse,
}