pub trait GraphInterface {
type NodeData;
type EdgeData;
Show 16 methods
// Required methods
fn node_count(&self) -> usize;
fn nodes(&self) -> impl Iterator<Item = NodeID>;
fn node(&self, id: NodeID) -> Result<&Node<Self::NodeData>, GraphError>;
fn node_mut(
&mut self,
id: NodeID,
) -> Result<&mut Node<Self::NodeData>, GraphError>;
fn edge(&self, id: EdgeID) -> Result<&Edge<Self::EdgeData>, GraphError>;
fn edge_mut(
&mut self,
id: EdgeID,
) -> Result<&mut Edge<Self::EdgeData>, GraphError>;
fn add_node(&mut self, data: Self::NodeData) -> NodeID;
fn add_nodes(&mut self, data: &[Self::NodeData]) -> Vec<NodeID>
where Self::NodeData: Clone;
fn add_edge(
&mut self,
from: NodeID,
to: NodeID,
data: Self::EdgeData,
) -> EdgeID;
fn remove_node(&mut self, id: NodeID) -> Result<(), GraphError>;
fn remove_edge(&mut self, id: EdgeID) -> Result<(), GraphError>;
fn add_edges(&mut self, data: &[(NodeID, NodeID)]) -> Vec<EdgeID>
where Self::EdgeData: Default + Clone,
Self::NodeData: Clone;
// Provided methods
fn remove_nodes(&mut self, ids: &[NodeID]) -> Result<(), GraphError> { ... }
fn add_edges_with_data(
&mut self,
data: &[(NodeID, NodeID, Self::EdgeData)],
) -> Vec<EdgeID>
where Self::EdgeData: Clone { ... }
fn add_nodes_and_edges(
&mut self,
data: Vec<(Self::NodeData, Vec<NodeID>)>,
) -> (Vec<NodeID>, Vec<EdgeID>)
where Self::EdgeData: Default + Clone,
Self::NodeData: Default + Clone { ... }
fn add_nodes_and_edges_with_data(
&mut self,
node_data: Vec<(Self::NodeData, Vec<(NodeID, Self::EdgeData)>)>,
) -> (Vec<NodeID>, Vec<EdgeID>)
where Self::NodeData: Default + Clone,
Self::EdgeData: Clone { ... }
}
Expand description
GraphInterface is a trait for basic “read and write” operations on a graph; core operations needed to change a graph and some derived helper functions.
Required Associated Types§
Required Methods§
fn node_count(&self) -> usize
fn nodes(&self) -> impl Iterator<Item = NodeID>
fn node(&self, id: NodeID) -> Result<&Node<Self::NodeData>, GraphError>
fn node_mut( &mut self, id: NodeID, ) -> Result<&mut Node<Self::NodeData>, GraphError>
fn edge(&self, id: EdgeID) -> Result<&Edge<Self::EdgeData>, GraphError>
fn edge_mut( &mut self, id: EdgeID, ) -> Result<&mut Edge<Self::EdgeData>, GraphError>
fn add_node(&mut self, data: Self::NodeData) -> NodeID
fn add_nodes(&mut self, data: &[Self::NodeData]) -> Vec<NodeID>
fn add_edge(&mut self, from: NodeID, to: NodeID, data: Self::EdgeData) -> EdgeID
fn remove_node(&mut self, id: NodeID) -> Result<(), GraphError>
fn remove_edge(&mut self, id: EdgeID) -> Result<(), GraphError>
fn add_edges(&mut self, data: &[(NodeID, NodeID)]) -> Vec<EdgeID>
Provided Methods§
fn remove_nodes(&mut self, ids: &[NodeID]) -> Result<(), GraphError>
fn add_edges_with_data( &mut self, data: &[(NodeID, NodeID, Self::EdgeData)], ) -> Vec<EdgeID>
fn add_nodes_and_edges( &mut self, data: Vec<(Self::NodeData, Vec<NodeID>)>, ) -> (Vec<NodeID>, Vec<EdgeID>)
fn add_nodes_and_edges_with_data( &mut self, node_data: Vec<(Self::NodeData, Vec<(NodeID, Self::EdgeData)>)>, ) -> (Vec<NodeID>, Vec<EdgeID>)
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.