summaryrefslogtreecommitdiff
path: root/docs/examples/jolib
diff options
context:
space:
mode:
authorGilles Dubochet <gilles.dubochet@epfl.ch>2005-12-16 18:44:33 +0000
committerGilles Dubochet <gilles.dubochet@epfl.ch>2005-12-16 18:44:33 +0000
commit53a3cc7b17f4cf97075b7e71720777fd84109696 (patch)
tree0cc784e0b47ea49cc151a136d19f20bfa8ee2197 /docs/examples/jolib
parentdf50e05006b43b007c2587549030d24b5c154398 (diff)
downloadscala-53a3cc7b17f4cf97075b7e71720777fd84109696.tar.gz
scala-53a3cc7b17f4cf97075b7e71720777fd84109696.tar.bz2
scala-53a3cc7b17f4cf97075b7e71720777fd84109696.zip
Created proper 'docs' folder for new layout.
Diffstat (limited to 'docs/examples/jolib')
-rw-r--r--docs/examples/jolib/Ref.scala56
-rw-r--r--docs/examples/jolib/parallelOr.scala59
2 files changed, 115 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);
+ });
+*/
+ }
+
+}
diff --git a/docs/examples/jolib/parallelOr.scala b/docs/examples/jolib/parallelOr.scala
new file mode 100644
index 0000000000..bff4dcd87a
--- /dev/null
+++ b/docs/examples/jolib/parallelOr.scala
@@ -0,0 +1,59 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2003, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+** $Id$
+\* */
+
+package examples.jolib;
+/*
+import concurrent.jolib._;
+import concurrent.SyncVar;
+
+/** Implementation in the join-calculus of a parallel OR. */
+object or extends Join {
+
+ object res extends Synchr[boolean](this) { case class C() extends SyncVar[boolean] };
+ object res1 extends Asynchr(this) { case class C(b: boolean); }
+ object res2 extends Asynchr(this) { case class C(b: boolean); }
+ object res1False extends Synchr[boolean](this) { case class C() extends SyncVar[boolean] };
+ object res2False extends Synchr[boolean](this) { case class C() extends SyncVar[boolean] };
+
+ rules(
+ Pair(List(res, res1), { case List(r @ res.C(), res1.C(b)) =>
+ if (b) r.set(b) else r.set(res1False(res1False.C())) }),
+
+ Pair(List(res, res2), { case List(r @ res.C(), res2.C(b)) =>
+ if (b) r.set(b) else r.set(res2False(res2False.C())) }),
+
+ Pair(List(res1False, res2), { case List(r @ res1False.C(), res2.C(b)) =>
+ r.set(b) }),
+
+ Pair(List(res2False, res1), { case List(r @ res2False.C(), res1.C(b)) =>
+ r.set(b) })
+ );
+
+ def apply(b1: => boolean, b2: => boolean): boolean = {
+ concurrent.ops.spawn(res1(res1.C(b1)));
+ concurrent.ops.spawn(res2(res2.C(b2)));
+ res(res.C())
+ }
+}
+*/
+object parallelOr {
+
+ def main(args: Array[String]): unit = {
+ def loop: boolean = { while (true) {}; true };
+/*
+ System.out.println("true || true = " + or(true, true));
+ System.out.println("false || false = " + or(false, false));
+ System.out.println("false || true = " + or(false, true));
+ System.out.println("true || false = " + or(true, false));
+ System.out.println("true || loop = " + or(true, loop));
+ System.out.println("loop || true = " + or(loop, true));
+*/
+ }
+
+}