mod def_mut_subgraph;
mod def_subgraph;
mod mr_subgraph;
mod sp_subgraph;
use crate::graph::Edge;
use crate::provide::{Edges, Neighbors, Vertices};
use anyhow::Result;
pub use def_mut_subgraph::MutSubgraph;
pub use def_subgraph::Subgraph;
pub use mr_subgraph::MultiRootSubgraph;
pub use sp_subgraph::ShortestPathSubgraph;
pub trait AsFrozenSubgraph<W, E: Edge<W>>: Neighbors + Vertices + Edges<W, E> {}
pub trait AsSubgraph<W, E: Edge<W>>: AsFrozenSubgraph<W, E> {
fn remove_edge(&mut self, src_id: usize, dst_id: usize, edge_id: usize) -> Result<()>;
fn remove_edge_unchecked(&mut self, src_id: usize, dst_id: usize, edge_id: usize);
fn remove_vertex(&mut self, vertex_id: usize) -> Result<()>;
fn remove_vertex_unchecked(&mut self, vertex_id: usize);
fn add_vertex_from_graph(&mut self, vertex_id: usize) -> Result<()>;
fn add_vertex_from_graph_unchecked(&mut self, vertex_id: usize);
fn add_edge_from_graph(&mut self, src_id: usize, dst_id: usize, edge_id: usize) -> Result<()>;
fn add_edge_from_graph_unchecked(&mut self, src_id: usize, dst_id: usize, edge_id: usize);
}
pub trait AsMutSubgraph<W, E: Edge<W>>: AsSubgraph<W, E> {
fn remove_vertex_from_graph(&mut self, vertex_id: usize) -> Result<()>;
fn remove_vertex_from_graph_unchecked(&mut self, vertex_id: usize);
fn remove_edge_from_graph(&mut self, src_id: usize, dst_id: usize, edge_id: usize)
-> Result<E>;
fn remove_edge_from_graph_unchecked(
&mut self,
src_id: usize,
dst_id: usize,
edge_id: usize,
) -> E;
fn add_vertex(&mut self) -> usize;
fn add_edge(&mut self, src_id: usize, dst_id: usize, edge: E) -> Result<usize>;
fn add_edge_unchecked(&mut self, src_id: usize, dst_id: usize, edge: E) -> usize;
}