wolf_graph/traits/
visitable_forest.rs1use anyhow::Result;
2
3use crate::{EdgeID, NodeID, Nodes, VisitableGraph};
4
5pub trait VisitableForest: VisitableGraph {
6 fn in_edge(&self, node: impl AsRef<NodeID>) -> Result<Option<EdgeID>>;
7 fn in_edge_with_root(&self, node: impl AsRef<NodeID>) -> Result<Option<EdgeID>>;
8 fn parent(&self, node: impl AsRef<NodeID>) -> Result<Option<NodeID>>;
9 fn children(&self, node: Option<impl AsRef<NodeID>>) -> Result<Nodes>;
10 fn has_children(&self, node: impl AsRef<NodeID>) -> Result<bool>;
11 fn child_count(&self, node: impl AsRef<NodeID>) -> Result<usize>;
12
13 fn descendants(&self, nodes: &Nodes) -> Result<Nodes> {
14 self.transitive_successors(nodes)
15 }
16
17 fn ancestors(&self, nodes: &Nodes) -> Result<Nodes> {
18 self.transitive_predecessors(nodes)
19 }
20}