libpitust 0.1.2

libpitust implements random utility functions I tend to use a lot
Documentation
use crate::graph::{GraphRooted, GraphSucc, node_map::NodeMap};

fn impl_preorder<G: GraphSucc>(
    graph: G,
    vis: &mut NodeMap<G, bool>,
    items: &mut Vec<G::Node>,
    node: G::Node,
) {
    debug_assert!(!vis[node]);
    vis[node] = true;
    items.push(node);
    for node in graph.succ_of(node) {
        if !vis[node] {
            impl_preorder(graph, vis, items, node);
        }
    }
}
pub fn preorder_from<G: GraphSucc>(graph: G, roots: &[G::Node]) -> Vec<G::Node> {
    let mut vis = NodeMap::new_with(graph, |_| false);
    let mut items = vec![];
    for &root in roots {
        if !vis[root] {
            impl_preorder(graph, &mut vis, &mut items, root);
        }
    }

    items
}
pub fn preorder<G: GraphSucc + GraphRooted>(graph: G) -> Vec<G::Node> {
    let mut vis = NodeMap::new_with(graph, |_| false);
    let mut items = vec![];
    impl_preorder(graph, &mut vis, &mut items, graph.root_node());

    items
}