summaryrefslogtreecommitdiff
path: root/rust
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2016-06-09 20:49:53 -0400
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2016-06-09 20:49:53 -0400
commit3f2c8b0321a56dca9338058a6a612bb1b79c0b36 (patch)
tree3cd3ffddc52eb4f36a6e6199cb20d52070561dac /rust
parentbd52727d465a777ee749b6649ca768ffe7e900b0 (diff)
Graph representation in rust.
Diffstat (limited to 'rust')
-rw-r--r--rust/graph/Cargo.toml11
-rw-r--r--rust/graph/graph.rs42
2 files changed, 53 insertions, 0 deletions
diff --git a/rust/graph/Cargo.toml b/rust/graph/Cargo.toml
new file mode 100644
index 0000000..adabedc
--- /dev/null
+++ b/rust/graph/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "graph"
+version = "0.1.0"
+authors = ["Kjetil Orbekk <kjetil.orbekk@gmail.com>"]
+
+[dependencies]
+itertools = "0.4.15"
+
+[[bin]]
+name = "graph"
+path = "graph.rs"
diff --git a/rust/graph/graph.rs b/rust/graph/graph.rs
new file mode 100644
index 0000000..a4e2d11
--- /dev/null
+++ b/rust/graph/graph.rs
@@ -0,0 +1,42 @@
+extern crate itertools;
+
+use std::cell::RefCell;
+use std::rc::Rc;
+use itertools::Itertools;
+
+struct Node {
+ label: i32,
+ neighbors: Vec<Rc<RefCell<Node>>>,
+}
+
+fn main () {
+ let mut nodes : Vec<Rc<RefCell<Node>>> = Vec::new();
+
+ 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.push(node1.clone());
+ nodes.push(node2.clone());
+ nodes.push(node3.clone());
+
+ for n in nodes {
+ println!("node: {}", n.borrow().label);
+ let neighbors: String = n.borrow()
+ .neighbors
+ .iter()
+ .map(|n| n.borrow().label.to_string())
+ .join(", ");
+ println!("neighbors: {}", neighbors);
+ }
+}