summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2007-02-02 15:17:51 +0000
committerPhilipp Haller <hallerp@gmail.com>2007-02-02 15:17:51 +0000
commit7cc5c06947e40236ee16a6a09d3de524183fda86 (patch)
tree8b22f79f79ffcb4b8485a3c6b21380efdc66d903 /docs
parent8c1bbafee4c68ccd158786deb4643d5a3074ce0d (diff)
downloadscala-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.scala20
-rw-r--r--docs/examples/actors/OrElse.scala19
-rw-r--r--docs/examples/actors/PingPong.scala83
-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.scala28
-rw-r--r--docs/examples/actors/message.scala (renamed from docs/examples/actors/Message.scala)13
-rw-r--r--docs/examples/actors/pingpong.scala75
-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")
}
}
}