diff options
author | Philipp Haller <hallerp@gmail.com> | 2007-02-02 15:17:51 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2007-02-02 15:17:51 +0000 |
commit | 7cc5c06947e40236ee16a6a09d3de524183fda86 (patch) | |
tree | 8b22f79f79ffcb4b8485a3c6b21380efdc66d903 /docs | |
parent | 8c1bbafee4c68ccd158786deb4643d5a3074ce0d (diff) | |
download | scala-7cc5c06947e40236ee16a6a09d3de524183fda86.tar.gz scala-7cc5c06947e40236ee16a6a09d3de524183fda86.tar.bz2 scala-7cc5c06947e40236ee16a6a09d3de524183fda86.zip |
Cleaned-up actor examples.
Diffstat (limited to 'docs')
-rw-r--r-- | docs/examples/actors/Loop.scala | 20 | ||||
-rw-r--r-- | docs/examples/actors/OrElse.scala | 19 | ||||
-rw-r--r-- | docs/examples/actors/PingPong.scala | 83 | ||||
-rw-r--r-- | docs/examples/actors/boundedbuffer.scala (renamed from docs/examples/actors/BoundedBufferTest.scala) | 15 | ||||
-rw-r--r-- | docs/examples/actors/links.scala (renamed from docs/examples/actors/Links.scala) | 11 | ||||
-rw-r--r-- | docs/examples/actors/looping.scala | 28 | ||||
-rw-r--r-- | docs/examples/actors/message.scala (renamed from docs/examples/actors/Message.scala) | 13 | ||||
-rw-r--r-- | docs/examples/actors/pingpong.scala | 75 | ||||
-rw-r--r-- | docs/examples/actors/producers.scala (renamed from docs/examples/actors/Joins.scala) | 10 | ||||
-rw-r--r-- | docs/examples/actors/seq.scala (renamed from docs/examples/actors/Seq.scala) | 6 |
10 files changed, 131 insertions, 149 deletions
diff --git a/docs/examples/actors/Loop.scala b/docs/examples/actors/Loop.scala deleted file mode 100644 index 45270cd35d..0000000000 --- a/docs/examples/actors/Loop.scala +++ /dev/null @@ -1,20 +0,0 @@ -package examples.actors - -import scala.actors.Actor._ - -object Loop extends Application { - - case object A - - val a = actor { - loop { - react { - case A => scala.Console.println("got A") - } - } - } - - for (val i <- 0 until 10) { - a ! A - } -} diff --git a/docs/examples/actors/OrElse.scala b/docs/examples/actors/OrElse.scala deleted file mode 100644 index cd31de11a6..0000000000 --- a/docs/examples/actors/OrElse.scala +++ /dev/null @@ -1,19 +0,0 @@ -package examples.actors - -import scala.actors._ -import scala.actors.Actor._ - -object OrElse { - def main(args: Array[String]) = { - actor { - val b1 = new Channel[int] - val b2 = new Channel[int] - b2 ! 42 - val item = { b1.receive {case any => any} - } orElse { - b2.receive {case any => any} } - - Console.println("" + item) - } - } -} diff --git a/docs/examples/actors/PingPong.scala b/docs/examples/actors/PingPong.scala deleted file mode 100644 index dbc35e36a4..0000000000 --- a/docs/examples/actors/PingPong.scala +++ /dev/null @@ -1,83 +0,0 @@ -package examples.actors - -import scala.actors.Actor -import scala.actors.Actor._ - -abstract class PingMessage -case class MsgStart() extends PingMessage -case class MsgPingInit(count: int, pong: Pong) extends PingMessage -case class MsgSendPing extends PingMessage -case class MsgPong(sender: Pong) extends PingMessage - -abstract class PongMessage -case class MsgPing(sender: Ping) extends PongMessage -case class MsgStop() extends PongMessage - -object PingPong { - def main(args : Array[String]): Unit = { - val ping = new Ping - ping.start - val pong = new Pong - pong.start - ping ! MsgPingInit(100000, pong) - ping ! MsgStart - } -} - - -class Ping extends Actor { - def act(): unit = { - loop(0, null) - } - def loop(pingsLeft: int, pong: Pong): unit = { - react { - case MsgPingInit(count, pong) => { - System.out.println("Ping: Initializing with count:"+count+":"+pong) - loop(count, pong) - } - case MsgStart() => { - System.out.println("Ping: starting.") - pong ! MsgPing(this) - loop(pingsLeft-1, pong) - } - case MsgSendPing() => { - pong ! MsgPing(this) - loop(pingsLeft-1, pong) - } - case MsgPong(pidS) => { - if (pingsLeft % 100 == 0) { - System.out.println("Ping: pong from: "+pidS) - } - if (pingsLeft > 0) - this ! MsgSendPing() - else { - System.out.println("Ping: Stop.") - pong ! MsgStop() - } - loop(pingsLeft, pong) - } - } - } -} - -class Pong extends Actor { - def act(): unit = { - loop(0) - } - - def loop(pongCount: int): unit = { - react { - case MsgPing(pidPing) => { - if (pongCount % 100 == 0) { - System.out.println("Pong: ping:"+pongCount+" from: "+pidPing) - } - pidPing ! MsgPong(this) - loop(pongCount+1) - } - case MsgStop() => { - System.out.println("Pong: Stop.") - System.exit(0) - } - } - } -} diff --git a/docs/examples/actors/BoundedBufferTest.scala b/docs/examples/actors/boundedbuffer.scala index 7585d8779a..6bc01dfe55 100644 --- a/docs/examples/actors/BoundedBufferTest.scala +++ b/docs/examples/actors/boundedbuffer.scala @@ -4,30 +4,33 @@ import scala.actors.Actor._ object boundedbuffer { class BoundedBuffer[T](N: int) { - private case class Get private case class Put(x: T) + private case object Get + private case object Stop private val buffer = actor { val buf = new Array[T](N) var in = 0; var out = 0; var n = 0 - while(true) { + loop { receive { case Put(x) if n < N => buf(in) = x; in = (in + 1) % N; n = n + 1; reply() - case Get() if n > 0 => + case Get if n > 0 => val r = buf(out); out = (out + 1) % N; n = n - 1; reply(r) + case Stop => reply(); exit("stopped") } } } - def put(x: T): Unit = buffer !? Put(x) - - def get: T = (buffer !? Get()).asInstanceOf[T] + def put(x: T) { buffer !? Put(x) } + def get: T = (buffer !? Get).asInstanceOf[T] + def stop() { buffer !? Stop } } def main(args: Array[String]) = { val buf = new BoundedBuffer[Int](1) buf.put(42) scala.Console.println("" + buf.get) + buf.stop() } } diff --git a/docs/examples/actors/Links.scala b/docs/examples/actors/links.scala index cbf69a5d0a..149f6db159 100644 --- a/docs/examples/actors/Links.scala +++ b/docs/examples/actors/links.scala @@ -1,11 +1,11 @@ package examples.actors -import scala.actors.Actor +import scala.actors.{Actor, Exit} import scala.actors.Actor._ -case object Stop +object links extends Application { -object Links extends Application { + case object Stop actor { val start = link(p(2)) @@ -20,8 +20,11 @@ object Links extends Application { Console.println("starting actor " + n + " (" + Thread.currentThread() + ")") self.trapExit = true link(a) - while (true) { + loop { receive { + case ex @ Exit(from, reason) => + Console.println("Actor " + n + " received " + ex) + exit("finished") case any => { Console.println("Actor " + n + " received " + any) a ! any diff --git a/docs/examples/actors/looping.scala b/docs/examples/actors/looping.scala new file mode 100644 index 0000000000..805d501d11 --- /dev/null +++ b/docs/examples/actors/looping.scala @@ -0,0 +1,28 @@ +package examples.actors + +import scala.actors.Actor._ + +object looping extends Application { + + case object A + + val a = actor { + var cnt = 0 + loop { + react { + case A => + cnt = cnt + 1; + if (cnt < 10) + scala.Console.println("received A") + else { + scala.Console.println("received last A") + exit("finished") + } + } + } + } + + for (val i <- 0 until 10) { + a ! A + } +} diff --git a/docs/examples/actors/Message.scala b/docs/examples/actors/message.scala index 8768c99c3e..7b0e6387bd 100644 --- a/docs/examples/actors/Message.scala +++ b/docs/examples/actors/message.scala @@ -1,13 +1,10 @@ package examples.actors -import scala.actors._ -import scala.actors.Actor._ +import scala.actors._; import scala.actors.Actor._ -object Message { +object message { def main(args: Array[String]) = { - val n = try { - Integer.parseInt(args(0)) - } + val n = try { Integer.parseInt(args(0)) } catch { case _ => scala.Console.println("Usage: examples.actors.Message <n>") @@ -21,10 +18,8 @@ object Message { react { case value: int => val j = value + 1; val nsum = sum + j - if (next == null && nsum >= finalSum) { + if (next == null && nsum >= finalSum) Console.println(nsum) - System.exit(0) - } else { if (next != null) next ! j beh(next, nsum) diff --git a/docs/examples/actors/pingpong.scala b/docs/examples/actors/pingpong.scala new file mode 100644 index 0000000000..6ab43c5528 --- /dev/null +++ b/docs/examples/actors/pingpong.scala @@ -0,0 +1,75 @@ +package examples.actors + +import scala.actors.Actor +import scala.actors.Actor._ + +abstract class PingMessage +case class MsgPingInit(count: int, pong: Actor) extends PingMessage +case object MsgStart extends PingMessage +case object MsgSendPing extends PingMessage +case object MsgPong extends PingMessage + +abstract class PongMessage +case object MsgPing extends PongMessage +case object MsgStop extends PongMessage + +object pingpong { + def main(args : Array[String]) { + val ping = new Ping + ping.start + val pong = new Pong + pong.start + ping ! MsgPingInit(100000, pong) + ping ! MsgStart + } +} + +class Ping extends Actor { + def act() { + var pingsLeft = 0 + var pong: Actor = null + loop { + react { + case MsgPingInit(count, png) => + Console.println("Ping: Initializing with count "+count+": "+png) + pingsLeft = count + pong = png + case MsgStart => + Console.println("Ping: starting.") + pong ! MsgPing + pingsLeft = pingsLeft - 1 + case MsgSendPing => + pong ! MsgPing + pingsLeft = pingsLeft - 1 + case MsgPong => + if (pingsLeft % 100 == 0) + Console.println("Ping: pong from: "+sender) + if (pingsLeft > 0) + self ! MsgSendPing + else { + Console.println("Ping: Stop.") + pong ! MsgStop + exit("stop") + } + } + } + } +} + +class Pong extends Actor { + def act() { + var pongCount = 0 + loop { + react { + case MsgPing => + if (pongCount % 100 == 0) + Console.println("Pong: ping "+pongCount+" from "+sender) + sender ! MsgPong + pongCount = pongCount + 1 + case MsgStop => + Console.println("Pong: Stop.") + exit("stop") + } + } + } +} diff --git a/docs/examples/actors/Joins.scala b/docs/examples/actors/producers.scala index 7baad9504f..7e8e34bf48 100644 --- a/docs/examples/actors/Joins.scala +++ b/docs/examples/actors/producers.scala @@ -1,6 +1,6 @@ package examples.actors -//import scala.actors.Actor +import scala.actors.Actor import scala.actors.Actor._ abstract class Producer[T] { @@ -37,7 +37,7 @@ abstract class Producer[T] { } } - private val coordinator /*: Actor*/ = actor { + private val coordinator: Actor = actor { var continue = true while (continue) { receive { @@ -51,7 +51,7 @@ abstract class Producer[T] { } } - private val producer = actor { + private val producer: Actor = actor { receive { case Next => produceValues @@ -101,7 +101,7 @@ object producers extends Application { } } - //actor { + actor { Console.print("PreOrder:") for (val x <- new PreOrder(tree).iterator) Console.print(" "+x) Console.print("\nPostOrder:") @@ -109,5 +109,5 @@ object producers extends Application { Console.print("\nInOrder:") for (val x <- new InOrder(tree).iterator) Console.print(" "+x) Console.print("\n") - //} + } } diff --git a/docs/examples/actors/Seq.scala b/docs/examples/actors/seq.scala index a709456f6d..e2720b4399 100644 --- a/docs/examples/actors/Seq.scala +++ b/docs/examples/actors/seq.scala @@ -2,19 +2,19 @@ package examples.actors import scala.actors.Actor._ -object Seq extends Application { +object seq extends Application { case object A val a = actor { { react { - case A => scala.Console.println("got A") + case A => Console.println("received A") } () } andThen { react { - case A => scala.Console.println("2nd reactor got A") + case A => Console.println("received 2nd A") } } } |