summaryrefslogtreecommitdiff
path: root/rust
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2016-06-09 21:00:57 -0400
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2016-06-09 21:00:57 -0400
commite8ad0f5d7eeaffe98e46ad4b382825f1bc055ca8 (patch)
tree562c5e71c3b0759da338fff06ac14ebee8060e00 /rust
parent3f2c8b0321a56dca9338058a6a612bb1b79c0b36 (diff)
Use closure to add nodes.
Diffstat (limited to 'rust')
-rw-r--r--rust/graph/graph.rs36
1 files changed, 20 insertions, 16 deletions
diff --git a/rust/graph/graph.rs b/rust/graph/graph.rs
index a4e2d11..648c131 100644
--- a/rust/graph/graph.rs
+++ b/rust/graph/graph.rs
@@ -9,26 +9,30 @@ struct Node {
neighbors: Vec<Rc<RefCell<Node>>>,
}
-fn main () {
+fn make_graph() -> Vec<Rc<RefCell<Node>>> {
let mut nodes : Vec<Rc<RefCell<Node>>> = Vec::new();
+ {
+ let mut make_node = |label: i32| {
+ let node = Rc::new(RefCell::new(Node {
+ label: label,
+ neighbors: vec!()
+ }));
+ nodes.push(node.clone());
+ node.clone()
+ };
- fn make_node(label: i32) -> Rc<RefCell<Node>> {
- Rc::new(RefCell::new(Node {
- label: label,
- neighbors: vec!()
- }))
+ let node1 = make_node(1);
+ let node2 = make_node(2);
+ let node3 = make_node(3);
+ node1.borrow_mut().neighbors.push(node2.clone());
+ node2.borrow_mut().neighbors.push(node1.clone());
+ node2.borrow_mut().neighbors.push(node3.clone());
}
+ nodes
+}
- let node1 = make_node(1);
- let node2 = make_node(2);
- let node3 = make_node(3);
- node1.borrow_mut().neighbors.push(node2.clone());
- node2.borrow_mut().neighbors.push(node1.clone());
- node2.borrow_mut().neighbors.push(node3.clone());
-
- nodes.push(node1.clone());
- nodes.push(node2.clone());
- nodes.push(node3.clone());
+fn main () {
+ let nodes = make_graph();
for n in nodes {
println!("node: {}", n.borrow().label);