summaryrefslogtreecommitdiff
path: root/docs/examples/jolib/Ref.scala
diff options
context:
space:
mode:
Diffstat (limited to 'docs/examples/jolib/Ref.scala')
-rw-r--r--docs/examples/jolib/Ref.scala56
1 files changed, 56 insertions, 0 deletions
diff --git a/docs/examples/jolib/Ref.scala b/docs/examples/jolib/Ref.scala
new file mode 100644
index 0000000000..73cc167307
--- /dev/null
+++ b/docs/examples/jolib/Ref.scala
@@ -0,0 +1,56 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2003, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+** $Id$
+\* */
+
+package examples.jolib;
+/*
+import concurrent.SyncVar;
+import concurrent.jolib._;
+
+class Ref[a](init: a) extends Join {
+
+ object get extends Synchr[a](this) { case class C() extends SyncVar[a]; }
+ object set extends Synchr[unit](this) { case class C(x: a) extends SyncVar[unit]; }
+ object state extends Asynchr(this) { case class C(x: a); }
+
+ rules (
+ Pair(List(get, state), { case List(g @ get.C(), state.C(x) ) =>
+ { g.set(x); state(state.C(x)) } }),
+ Pair(List(set, state), { case List(s @ set.C(x), state.C(y) ) =>
+ { s.set(()); state(state.C(x)) } })
+ );
+
+ state(state.C(init));
+
+ def Get: a = get(get.C());
+ def Set(x: a): unit = set(set.C(x));
+}
+*/
+object RefTest {
+
+ def main(args: Array[String]) = {
+ System.out.println("Started.");
+/*
+ concurrent.ops.spawn({
+ val r1 = new Ref(0);
+ System.out.println("Reference r1 created.");
+ System.out.println("Value r1 (first time) = " + r1.Get);
+ r1.Set(42);
+ System.out.println("Value r1 (second time) = " + r1.Get);
+ });
+ concurrent.ops.spawn({
+ val r2 = new Ref(100);
+ System.out.println("Reference r2 created.");
+ System.out.println("Value r2 (first time) = " + r2.Get);
+ r2.Set(89);
+ System.out.println("Value r2 (second time) = " + r2.Get);
+ });
+*/
+ }
+
+}