[][src]Function traversal::dft_paths

pub fn dft_paths<'a, T, F, I>(root: &'a T, children: F) -> DftPaths<'a, T, F, I> where
    T: ?Sized,
    F: Fn(&'a T) -> I,
    I: Iterator<Item = &'a T>, 

This is a shorthand for DftPaths::new, see DftPaths for more information.

Example

struct Node(&'static str, &'static [Node]);

let tree = Node("A", &[
    Node("B", &[
        Node("C", &[]),
        Node("D", &[])
    ]),
    Node("E", &[
        Node("F", &[]),
        Node("G", &[])
    ]),
]);

// `&tree` represents the root `Node`.
// The `Fn(&Node) -> Iterator<Item = &Node>` returns
// an `Iterator` to get the child `Node`s.
let iter = traversal::dft_paths(&tree, |node| node.1.iter());

// Map `Iterator<Item = Vec<&Node>>` into `Iterator<Item = Vec<&str>>`
let mut iter = iter.map(|path| path.iter().map(|node| node.0).collect::<Vec<_>>());

assert_eq!(iter.next(), Some(vec!["A", "B"]));
assert_eq!(iter.next(), Some(vec!["A", "B", "C"]));
assert_eq!(iter.next(), Some(vec!["A", "B", "D"]));
assert_eq!(iter.next(), Some(vec!["A", "E"]));
assert_eq!(iter.next(), Some(vec!["A", "E", "F"]));
assert_eq!(iter.next(), Some(vec!["A", "E", "G"]));
assert_eq!(iter.next(), None);