pub struct DAG<Inner>where
Inner: MutableGraph,{ /* private fields */ }Expand description
A DAG (Directed Acyclic Graph) data structure.
Implementations§
Source§impl<Inner> DAG<Inner>where
Inner: MutableGraph,
impl<Inner> DAG<Inner>where
Inner: MutableGraph,
Source§impl<Inner> DAG<Inner>where
Inner: MutableGraph + Default,
impl<Inner> DAG<Inner>where
Inner: MutableGraph + Default,
Source§impl<Inner> DAG<Inner>where
Inner: MutableGraph + Clone,
impl<Inner> DAG<Inner>where
Inner: MutableGraph + Clone,
pub fn adding_node_with_data( &self, id: impl AsRef<NodeID>, data: Inner::NData, ) -> Result<Self>
pub fn adding_edge_with_data( &self, id: impl AsRef<EdgeID>, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, data: Inner::EData, ) -> Result<Self>
pub fn removing_edge(&self, id: impl AsRef<EdgeID>) -> Result<Self>
pub fn removing_node(&self, id: impl AsRef<NodeID>) -> Result<Self>
pub fn moving_edge( &self, id: impl AsRef<EdgeID>, new_source: impl AsRef<NodeID>, new_target: impl AsRef<NodeID>, ) -> Result<Self>
Source§impl<Inner> DAG<Inner>where
Inner: MutableGraph + Serialize,
impl<Inner> DAG<Inner>where
Inner: MutableGraph + Serialize,
Source§impl<'de, Inner> DAG<Inner>where
Inner: MutableGraph + Deserialize<'de>,
impl<'de, Inner> DAG<Inner>where
Inner: MutableGraph + Deserialize<'de>,
Trait Implementations§
Source§impl<'de, Inner> Deserialize<'de> for DAG<Inner>where
Inner: MutableGraph + Deserialize<'de>,
impl<'de, Inner> Deserialize<'de> for DAG<Inner>where
Inner: MutableGraph + Deserialize<'de>,
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> MutableGraph for DAG<Inner>where
Inner: MutableGraph,
impl<Inner> MutableGraph for DAG<Inner>where
Inner: MutableGraph,
fn add_node_with_data( &mut self, id: impl AsRef<NodeID>, data: Self::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: 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_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<Inner> VisitableGraph for DAG<Inner>where
Inner: MutableGraph,
impl<Inner> VisitableGraph for DAG<Inner>where
Inner: MutableGraph,
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, 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 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.
impl<Inner> Eq for DAG<Inner>where
Inner: MutableGraph + Eq,
Auto Trait Implementations§
impl<Inner> Freeze for DAG<Inner>where
Inner: Freeze,
impl<Inner> RefUnwindSafe for DAG<Inner>where
Inner: RefUnwindSafe,
impl<Inner> Send for DAG<Inner>where
Inner: Send,
impl<Inner> Sync for DAG<Inner>where
Inner: Sync,
impl<Inner> Unpin for DAG<Inner>where
Inner: Unpin,
impl<Inner> UnwindSafe for DAG<Inner>where
Inner: 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