pub struct Graph<GData, NData, EData>{ /* private fields */ }Expand description
A general graph data structure with value semantics.
The graph is parameterized by three types:
GDatais the type of the graph data.NDatais the type of the node data.EDatais the type of the edge data.
The graph is implemented as a set of nodes and edges. Nodes are identified by
unique NodeID values, and edges are identified by unique EdgeID values.
The graph and its nodes and edges can have associated data, or they can be
the unit type ().
Implementations§
Source§impl<GData, NData, EData> Graph<GData, NData, EData>
impl<GData, NData, EData> Graph<GData, NData, EData>
pub fn new_with_data(data: GData) -> Self
Trait Implementations§
Source§impl<'de, GData, NData, EData> Deserialize<'de> for Graph<GData, NData, EData>where
GData: Clone + Deserialize<'de> + 'static + Default,
NData: Clone + Deserialize<'de> + 'static + Default,
EData: Clone + Deserialize<'de> + 'static + Default,
impl<'de, GData, NData, EData> Deserialize<'de> for Graph<GData, NData, EData>where
GData: Clone + Deserialize<'de> + 'static + Default,
NData: Clone + Deserialize<'de> + 'static + Default,
EData: Clone + Deserialize<'de> + 'static + Default,
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<GData, NData, EData> MutableGraph for Graph<GData, NData, EData>
impl<GData, NData, EData> MutableGraph for Graph<GData, NData, EData>
fn add_node_with_data( &mut self, id: impl AsRef<NodeID>, data: NData, ) -> Result<()>
fn add_edge_with_data( &mut self, id: impl AsRef<EdgeID>, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, data: Self::EData, ) -> Result<()>
fn remove_edge(&mut self, id: impl AsRef<EdgeID>) -> Result<()>
fn clear_edges(&mut self, id: impl AsRef<NodeID>) -> Result<()>
fn remove_node(&mut self, id: impl AsRef<NodeID>) -> Result<()>
fn move_edge( &mut self, id: impl AsRef<EdgeID>, new_source: impl AsRef<NodeID>, new_target: impl AsRef<NodeID>, ) -> Result<()>
fn set_data(&mut self, data: GData)
fn set_node_data(&mut self, id: impl AsRef<NodeID>, data: NData) -> Result<()>
fn set_edge_data(&mut self, id: impl AsRef<EdgeID>, data: EData) -> Result<()>
fn with_data(&mut self, transform: &dyn Fn(&mut Self::GData))
fn with_node_data( &mut self, id: impl AsRef<NodeID>, transform: &dyn Fn(&mut Self::NData), ) -> Result<()>
fn with_edge_data( &mut self, id: impl AsRef<EdgeID>, transform: &dyn Fn(&mut Self::EData), ) -> Result<()>
fn adding_node_with_data( &self, id: impl AsRef<NodeID>, data: Self::NData, ) -> Result<Self>
fn add_node(&mut self, id: impl AsRef<NodeID>) -> Result<()>
fn adding_node(&self, id: impl AsRef<NodeID>) -> Result<Self>
fn adding_edge_with_data( &self, id: impl AsRef<EdgeID>, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, data: Self::EData, ) -> Result<Self>
fn add_edge( &mut self, id: impl AsRef<EdgeID>, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, ) -> Result<()>
fn adding_edge( &self, id: impl AsRef<EdgeID>, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, ) -> Result<Self>
fn removing_edge(&self, id: impl AsRef<EdgeID>) -> Result<Self>
fn clearing_edges(&self, id: impl AsRef<NodeID>) -> Result<Self>
fn removing_node(&self, id: impl AsRef<NodeID>) -> Result<Self>
fn moving_edge( &self, id: impl AsRef<EdgeID>, new_source: impl AsRef<NodeID>, new_target: impl AsRef<NodeID>, ) -> Result<Self>
fn setting_data(&self, data: Self::GData) -> Self
fn setting_node_data( &self, id: impl AsRef<NodeID>, data: Self::NData, ) -> Result<Self>
fn setting_edge_data( &self, id: impl AsRef<EdgeID>, data: Self::EData, ) -> Result<Self>
Source§impl<GData, NData, EData> VisitableGraph for Graph<GData, NData, EData>
impl<GData, NData, EData> VisitableGraph for Graph<GData, NData, EData>
type GData = GData
type NData = NData
type EData = EData
Source§fn node_count(&self) -> usize
fn node_count(&self) -> usize
Returns the number of nodes in the graph.
Source§fn edge_count(&self) -> usize
fn edge_count(&self) -> usize
Returns the number of edges in the graph.
Source§fn has_node(&self, id: impl AsRef<NodeID>) -> bool
fn has_node(&self, id: impl AsRef<NodeID>) -> bool
Returns
true if the graph contains the given node.Source§fn has_edge(&self, id: impl AsRef<EdgeID>) -> bool
fn has_edge(&self, id: impl AsRef<EdgeID>) -> bool
Returns
true if the graph contains the given edge.Source§fn has_edge_from_to(
&self,
source: impl AsRef<NodeID>,
target: impl AsRef<NodeID>,
) -> bool
fn has_edge_from_to( &self, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, ) -> bool
Returns
true if the graph contains an edge from source to target.Source§fn has_edge_between(&self, a: impl AsRef<NodeID>, b: impl AsRef<NodeID>) -> bool
fn has_edge_between(&self, a: impl AsRef<NodeID>, b: impl AsRef<NodeID>) -> bool
Returns
true if the graph contains an edge between a and b,
regardless of direction.Source§fn source(&self, id: impl AsRef<EdgeID>) -> Result<NodeID>
fn source(&self, id: impl AsRef<EdgeID>) -> Result<NodeID>
Returns the source node of the edge.
Source§fn target(&self, id: impl AsRef<EdgeID>) -> Result<NodeID>
fn target(&self, id: impl AsRef<EdgeID>) -> Result<NodeID>
Returns the target node of the edge.
Source§fn endpoints(&self, id: impl AsRef<EdgeID>) -> Result<(NodeID, NodeID)>
fn endpoints(&self, id: impl AsRef<EdgeID>) -> Result<(NodeID, NodeID)>
Returns the endpoints of the edge.
Source§fn out_edges(&self, id: impl AsRef<NodeID>) -> Result<Edges>
fn out_edges(&self, id: impl AsRef<NodeID>) -> Result<Edges>
Returns the out-edges of the node.
Source§fn incident_edges(&self, id: impl AsRef<NodeID>) -> Result<Edges>
fn incident_edges(&self, id: impl AsRef<NodeID>) -> Result<Edges>
Returns the incident edges of the node.
Source§fn out_degree(&self, id: impl AsRef<NodeID>) -> Result<usize>
fn out_degree(&self, id: impl AsRef<NodeID>) -> Result<usize>
Returns the number of out-edges of the node.
Source§fn in_degree(&self, id: impl AsRef<NodeID>) -> Result<usize>
fn in_degree(&self, id: impl AsRef<NodeID>) -> Result<usize>
Returns the number of in-edges of the node.
Source§fn degree(&self, id: impl AsRef<NodeID>) -> Result<usize>
fn degree(&self, id: impl AsRef<NodeID>) -> Result<usize>
Returns the number of incident edges of the node.
Source§fn successors(&self, id: impl AsRef<NodeID>) -> Result<Nodes>
fn successors(&self, id: impl AsRef<NodeID>) -> Result<Nodes>
Returns the immediate successors of the node.
Source§fn predecessors(&self, id: impl AsRef<NodeID>) -> Result<Nodes>
fn predecessors(&self, id: impl AsRef<NodeID>) -> Result<Nodes>
Returns the immediate predecessors of the node.
Source§fn neighbors(&self, id: impl AsRef<NodeID>) -> Result<Nodes>
fn neighbors(&self, id: impl AsRef<NodeID>) -> Result<Nodes>
Returns the immediate neighbors of the node.
Source§fn has_successors(&self, id: impl AsRef<NodeID>) -> Result<bool>
fn has_successors(&self, id: impl AsRef<NodeID>) -> Result<bool>
Returns
true if the node has successors.Source§fn has_predecessors(&self, id: impl AsRef<NodeID>) -> Result<bool>
fn has_predecessors(&self, id: impl AsRef<NodeID>) -> Result<bool>
Returns
true if the node has predecessors.Source§fn has_neighbors(&self, id: impl AsRef<NodeID>) -> Result<bool>
fn has_neighbors(&self, id: impl AsRef<NodeID>) -> Result<bool>
Returns
true if the node has neighbors.Source§fn node_data(&self, id: impl AsRef<NodeID>) -> Result<Cow<'static, NData>>
fn node_data(&self, id: impl AsRef<NodeID>) -> Result<Cow<'static, NData>>
Returns a reference to the node’s data.
Source§fn edge_data(&self, id: impl AsRef<EdgeID>) -> Result<Cow<'static, EData>>
fn edge_data(&self, id: impl AsRef<EdgeID>) -> Result<Cow<'static, EData>>
Returns a reference to the edge’s data.
Source§fn all_roots(&self) -> Nodes
fn all_roots(&self) -> Nodes
The set of all “roots” (nodes with no predecessors) in the graph.
Source§fn all_leaves(&self) -> Nodes
fn all_leaves(&self) -> Nodes
The set of all “leaves” (nodes with no successors) in the graph.
Source§fn non_roots(&self) -> Nodes
fn non_roots(&self) -> Nodes
The set of all nodes that are not roots (i.e., nodes with at least one predecessor).
Source§fn non_leaves(&self) -> Nodes
fn non_leaves(&self) -> Nodes
The set of all nodes that are not leaves (i.e., nodes with at least one successor).
Source§fn all_internals(&self) -> Nodes
fn all_internals(&self) -> Nodes
The set of all nodes that are neither roots nor leaves (i.e., nodes with
at least one predecessor and at least one successor).
Source§fn is_leaf(&self, id: impl AsRef<NodeID>) -> Result<bool>
fn is_leaf(&self, id: impl AsRef<NodeID>) -> Result<bool>
Returns
true if the node is a leaf (i.e., has no successors).Source§fn is_root(&self, id: impl AsRef<NodeID>) -> Result<bool>
fn is_root(&self, id: impl AsRef<NodeID>) -> Result<bool>
Returns
true if the node is a root (i.e., has no predecessors).Source§fn is_internal(&self, id: impl AsRef<NodeID>) -> Result<bool>
fn is_internal(&self, id: impl AsRef<NodeID>) -> Result<bool>
Returns
true if the node is neither a root nor a leaf (i.e., has at
least one predecessor and at least one successor).Source§fn edges_from_to(
&self,
source: impl AsRef<NodeID>,
target: impl AsRef<NodeID>,
) -> Result<Edges>
fn edges_from_to( &self, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, ) -> Result<Edges>
Returns the edges that have the given source and target nodes. Read more
Source§fn edges_between(
&self,
a: impl AsRef<NodeID>,
b: impl AsRef<NodeID>,
) -> Result<Edges>
fn edges_between( &self, a: impl AsRef<NodeID>, b: impl AsRef<NodeID>, ) -> Result<Edges>
Returns the edges that have the given nodes as endpoints. Read more
Source§fn edges_from_to_nodes(&self, sources: &Nodes, targets: &Nodes) -> Result<Edges>
fn edges_from_to_nodes(&self, sources: &Nodes, targets: &Nodes) -> Result<Edges>
Returns the edges connecting the given source nodes to the given target nodes.
Source§fn edges_between_nodes(&self, a: &Nodes, b: &Nodes) -> Result<Edges>
fn edges_between_nodes(&self, a: &Nodes, b: &Nodes) -> Result<Edges>
Returns the edges connecting the given sets of nodes.
Source§fn nodes_successors(&self, ids: &Nodes) -> Result<Nodes>
fn nodes_successors(&self, ids: &Nodes) -> Result<Nodes>
Returns the immediate successors of all the given nodes.
Source§fn nodes_predecessors(&self, ids: &Nodes) -> Result<Nodes>
fn nodes_predecessors(&self, ids: &Nodes) -> Result<Nodes>
Returns the immediate predecessors of all the given nodes.
Auto Trait Implementations§
impl<GData, NData, EData> Freeze for Graph<GData, NData, EData>where
GData: Freeze,
impl<GData, NData, EData> RefUnwindSafe for Graph<GData, NData, EData>where
GData: RefUnwindSafe,
impl<GData, NData, EData> Send for Graph<GData, NData, EData>
impl<GData, NData, EData> Sync for Graph<GData, NData, EData>
impl<GData, NData, EData> Unpin for Graph<GData, NData, EData>where
GData: Unpin,
impl<GData, NData, EData> UnwindSafe for Graph<GData, NData, EData>where
GData: UnwindSafe + RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more