pub struct Forest<InnerTree>{ /* private fields */ }Expand description
A forest is a graph that is a collection of trees.
Unlike a tree, a forest can have multiple roots.
Implementations§
Source§impl<Inner> Forest<Inner>
impl<Inner> Forest<Inner>
pub fn new_with_tree(tree: Inner) -> Self
Trait Implementations§
Source§impl<'de, Inner> Deserialize<'de> for Forest<Inner>
impl<'de, Inner> Deserialize<'de> for Forest<Inner>
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<Inner> MutableForest for Forest<Inner>
impl<Inner> MutableForest for Forest<Inner>
fn add_node_with_node_and_edge_data( &mut self, node: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, node_data: Self::NData, edge_data: Self::EData, ) -> Result<()>
fn remove_node_ungrouping(&mut self, id: impl AsRef<NodeID>) -> Result<()>
fn remove_node_and_children(&mut self, id: impl AsRef<NodeID>) -> Result<Nodes>
fn remove_children(&mut self, id: impl AsRef<NodeID>) -> Result<Nodes>
fn move_node( &mut self, id: impl AsRef<NodeID>, new_parent: Option<impl AsRef<NodeID>>, ) -> Result<()>
fn set_data(&mut self, data: Self::GData)
fn set_node_data( &mut self, id: impl AsRef<NodeID>, data: Self::NData, ) -> Result<()>
fn set_edge_data( &mut self, id: impl AsRef<EdgeID>, data: Self::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_node_and_edge_data( &self, node: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, node_data: Self::NData, edge_data: Self::EData, ) -> Result<Self>
fn removing_node_ungrouping(&self, id: impl AsRef<NodeID>) -> Result<Self>
fn removing_node_and_children(&self, id: impl AsRef<NodeID>) -> Result<Self>
fn removing_children(&self, id: impl AsRef<NodeID>) -> Result<Self>
fn moving_node( &self, id: impl AsRef<NodeID>, new_parent: Option<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>
fn add_node( &mut self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, ) -> Result<()>
fn adding_node( &self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, ) -> Result<Self>
fn add_node_with_edge_data( &mut self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, edge_data: Self::EData, ) -> Result<()>
fn adding_node_with_edge_data( &self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, edge_data: Self::EData, ) -> Result<Self>
fn add_node_with_node_data( &mut self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, node_data: Self::NData, ) -> Result<()>
fn adding_node_with_node_data( &self, id: impl AsRef<NodeID>, parent: Option<impl AsRef<NodeID>>, edge: impl AsRef<EdgeID>, node_data: Self::NData, ) -> Result<Self>
Source§impl<Inner> VisitableForest for Forest<Inner>
impl<Inner> VisitableForest for Forest<Inner>
fn in_edge(&self, node: impl AsRef<NodeID>) -> Result<Option<EdgeID>>
fn in_edge_with_root(&self, node: impl AsRef<NodeID>) -> Result<Option<EdgeID>>
fn parent(&self, node: impl AsRef<NodeID>) -> Result<Option<NodeID>>
fn children(&self, node: Option<impl AsRef<NodeID>>) -> Result<Nodes>
fn has_children(&self, node: impl AsRef<NodeID>) -> Result<bool>
fn child_count(&self, node: impl AsRef<NodeID>) -> Result<usize>
fn descendants(&self, nodes: &Nodes) -> Result<Nodes>
fn ancestors(&self, nodes: &Nodes) -> Result<Nodes>
Source§impl<Inner> VisitableGraph for Forest<Inner>
impl<Inner> VisitableGraph for Forest<Inner>
type GData = <Inner as VisitableGraph>::GData
type NData = <Inner as VisitableGraph>::NData
type EData = <Inner as VisitableGraph>::EData
Source§fn node_data(&self, id: impl AsRef<NodeID>) -> Result<Cow<'static, Self::NData>>
fn node_data(&self, id: impl AsRef<NodeID>) -> Result<Cow<'static, Self::NData>>
Returns a reference to the node’s data.
Source§fn edge_data(&self, id: impl AsRef<EdgeID>) -> Result<Cow<'static, Self::EData>>
fn edge_data(&self, id: impl AsRef<EdgeID>) -> Result<Cow<'static, Self::EData>>
Returns a reference to the edge’s data.
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, node: impl AsRef<NodeID>) -> bool
fn has_node(&self, node: impl AsRef<NodeID>) -> bool
Returns
true if the graph contains the given node.Source§fn has_edge(&self, edge: impl AsRef<EdgeID>) -> bool
fn has_edge(&self, edge: 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_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 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 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 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 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, node: impl AsRef<NodeID>) -> Result<bool>
fn is_leaf(&self, node: impl AsRef<NodeID>) -> Result<bool>
Returns
true if the node is a leaf (i.e., has no successors).Source§fn is_root(&self, node: impl AsRef<NodeID>) -> Result<bool>
fn is_root(&self, node: impl AsRef<NodeID>) -> Result<bool>
Returns
true if the node is a root (i.e., has no predecessors).Source§fn is_internal(&self, node: impl AsRef<NodeID>) -> Result<bool>
fn is_internal(&self, node: 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.
impl<InnerTree> Eq for Forest<InnerTree>
impl<InnerTree> StructuralPartialEq for Forest<InnerTree>
Auto Trait Implementations§
impl<InnerTree> Freeze for Forest<InnerTree>where
InnerTree: Freeze,
impl<InnerTree> RefUnwindSafe for Forest<InnerTree>where
InnerTree: RefUnwindSafe,
impl<InnerTree> Send for Forest<InnerTree>where
InnerTree: Send,
impl<InnerTree> Sync for Forest<InnerTree>where
InnerTree: Sync,
impl<InnerTree> Unpin for Forest<InnerTree>where
InnerTree: Unpin,
impl<InnerTree> UnwindSafe for Forest<InnerTree>where
InnerTree: UnwindSafe,
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