diff options
author | Paul Phillips <paulp@improving.org> | 2009-09-05 11:23:43 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2009-09-05 11:23:43 +0000 |
commit | fd1eba71450b3d60fd02dba22f951a32485629d8 (patch) | |
tree | 7530ef1f6190a66b4734c63760aee1afd3bb8e96 /src/actors | |
parent | 0ae9ca5d2406efe2df10824beb192d958ee2c82e (diff) | |
download | scala-fd1eba71450b3d60fd02dba22f951a32485629d8.tar.gz scala-fd1eba71450b3d60fd02dba22f951a32485629d8.tar.bz2 scala-fd1eba71450b3d60fd02dba22f951a32485629d8.zip |
Minor refinements to recent patches, and the re...
Minor refinements to recent patches, and the reversion of times. "It was
the best of times... it was the reversion of times..."
Diffstat (limited to 'src/actors')
-rw-r--r-- | src/actors/scala/actors/MessageQueue.scala | 70 |
1 files changed, 41 insertions, 29 deletions
diff --git a/src/actors/scala/actors/MessageQueue.scala b/src/actors/scala/actors/MessageQueue.scala index 4b55fab21d..6e69f1cdac 100644 --- a/src/actors/scala/actors/MessageQueue.scala +++ b/src/actors/scala/actors/MessageQueue.scala @@ -18,20 +18,11 @@ package scala.actors * @author Philipp Haller */ @serializable -class MessageQueueElement(var msg: Any, var session: OutputChannel[Any], var next: MessageQueueElement) { +class MessageQueueElement(val msg: Any, val session: OutputChannel[Any], var next: MessageQueueElement) { def this() = this(null, null, null) def this(msg: Any, session: OutputChannel[Any]) = this(msg, session, null) } -object MessageQueue { - // for tracing purposes - private var queueNumberAssigner = 0 - private def getQueueNumber = synchronized { - queueNumberAssigner += 1 - queueNumberAssigner - } -} - /** * The class <code>MessageQueue</code> provides an efficient * implementation of a message queue specialized for this actor @@ -42,13 +33,9 @@ object MessageQueue { * @author Philipp Haller */ @serializable -class MessageQueue(label: String) { - def this() = this("Unlabelled") - private val queueNumber = MessageQueue.getQueueNumber - private var trace = false // set to true to print out all appends/removes - - private var first: MessageQueueElement = null - private var last: MessageQueueElement = null // last eq null iff list is empty +class MessageQueue(protected val label: String) { + protected var first: MessageQueueElement = null + protected var last: MessageQueueElement = null // last eq null iff list is empty private var _size = 0 def size = _size @@ -60,9 +47,6 @@ class MessageQueue(label: String) { def append(msg: Any, session: OutputChannel[Any]) { changeSize(1) // size always increases by 1 - if (trace) - printQueue("APPEND %s" format msg) - val el = new MessageQueueElement(msg, session) if (isEmpty) first = el @@ -100,12 +84,7 @@ class MessageQueue(label: String) { var curr = first while (curr != null) - if (test(curr.msg)) { - if (trace) - printQueue("GET %s" format curr.msg) - - return Some(curr.msg) // early return - } + if (test(curr.msg)) return Some(curr.msg) // early return else curr = curr.next None @@ -123,9 +102,6 @@ class MessageQueue(label: String) { var pos = 0 def foundMsg(x: MessageQueueElement) = { - if (trace) - printQueue("REMOVE %s" format x.msg) - changeSize(-1) Some(x) } @@ -165,6 +141,33 @@ class MessageQueue(label: String) { None } } +} + +/** Debugging trait. + */ +private[actors] trait MessageQueueTracer extends MessageQueue +{ + private val queueNumber = MessageQueueTracer.getQueueNumber + + override def append(msg: Any, session: OutputChannel[Any]) { + super.append(msg, session) + printQueue("APPEND %s" format msg) + } + override def get(n: Int)(p: Any => Boolean): Option[Any] = { + val res = super.get(n)(p) + printQueue("GET %s" format res) + res + } + override def remove(n: Int)(p: Any => Boolean): Option[(Any, OutputChannel[Any])] = { + val res = super.remove(n)(p) + printQueue("REMOVE %s" format res) + res + } + override def extractFirst(p: Any => Boolean): MessageQueueElement = { + val res = super.extractFirst(p) + printQueue("EXTRACT_FIRST %s" format res) + res + } private def printQueue(msg: String) = { def firstMsg = if (first eq null) "null" else first.msg @@ -173,4 +176,13 @@ class MessageQueue(label: String) { println("[%s size=%d] [%s] first = %s, last = %s".format(this, size, msg, firstMsg, lastMsg)) } override def toString() = "%s:%d".format(label, queueNumber) +} + +object MessageQueueTracer { + // for tracing purposes + private var queueNumberAssigner = 0 + private def getQueueNumber = synchronized { + queueNumberAssigner += 1 + queueNumberAssigner + } }
\ No newline at end of file |