Skip to main content

reify_graph

Function reify_graph 

Source
pub fn reify_graph<T, F>(root: Rc<RefCell<T>>, children: F) -> ReifiedGraph<T>
where F: Fn(&T) -> Vec<Rc<RefCell<T>>>, T: Clone,
Expand description

Reify an Rc<RefCell<T>> graph into a ReifiedGraph.

The children closure extracts child pointers from a node’s data. The resulting graph contains cloned node data and edges derived from pointer identity.

§Examples

use reify_graph::reify_graph;
use std::cell::RefCell;
use std::rc::Rc;

#[derive(Clone, Debug)]
struct Node {
    value: i32,
    children: Vec<Rc<RefCell<Node>>>,
}

let shared = Rc::new(RefCell::new(Node { value: 2, children: vec![] }));
let root = Rc::new(RefCell::new(Node {
    value: 0,
    children: vec![
        Rc::new(RefCell::new(Node { value: 1, children: vec![shared.clone()] })),
        shared.clone(),
    ],
}));

let graph = reify_graph(root, |n| n.children.clone());
// 3 unique nodes: root(0), child(1), shared(2)
assert_eq!(graph.nodes.len(), 3);