about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2011-07-23 22:41:28 -0700
committerBrian Anderson <banderson@mozilla.com>2011-07-24 16:18:31 -0700
commitbd81adabffd01dd3c2c25902314d5e8173835dfa (patch)
treef766f1d2100e5d5450f127401ec064e820f3c679
parent73fed0110823fad26900626bd043b4647e8b3fb7 (diff)
downloadrust-bd81adabffd01dd3c2c25902314d5e8173835dfa.tar.gz
rust-bd81adabffd01dd3c2c25902314d5e8173835dfa.zip
Add task::send and task::recv
-rw-r--r--src/lib/task.rs8
-rw-r--r--src/test/stdtest/task.rs8
2 files changed, 16 insertions, 0 deletions
diff --git a/src/lib/task.rs b/src/lib/task.rs
index dc238ffe7b3..acee188a7b3 100644
--- a/src/lib/task.rs
+++ b/src/lib/task.rs
@@ -52,6 +52,14 @@ fn clone_chan[T](chan[T] c) -> chan[T] {
     ret unsafe::reinterpret_cast(cloned);
 }
 
+fn send[T](chan[T] c, &T v) {
+    c <| v;
+}
+
+fn recv[T](port[T] p) -> T {
+    auto v; p |> v; v
+}
+
 // Spawn a task and immediately return a channel for communicating to it
 fn worker[T](fn(port[T]) f) -> rec(task task, chan[T] chan) {
     // FIXME: This is frighteningly unsafe and only works for
diff --git a/src/test/stdtest/task.rs b/src/test/stdtest/task.rs
index cc7a299194c..62ed8b9638a 100644
--- a/src/test/stdtest/task.rs
+++ b/src/test/stdtest/task.rs
@@ -34,6 +34,14 @@ fn test_join() {
 }
 
 #[test]
+fn test_send_recv() {
+    auto p = port[int]();
+    auto c = chan(p);
+    task::send(c, 10);
+    assert task::recv(p) == 10;
+}
+
+#[test]
 fn test_worker() {
     task::worker(fn(port[int] p) {
         auto x; p |> x;