diff options
author | Philipp Haller <hallerp@gmail.com> | 2010-03-08 15:01:53 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2010-03-08 15:01:53 +0000 |
commit | 57261cf375a8442a267b918ed582af526f8491fa (patch) | |
tree | 7198dd7ee431697803bf865ccb7343aa2f939664 /src/actors/scala/actors/MessageQueue.scala | |
parent | 13f24056a444fd5038cebdb294a0959bfe979492 (diff) | |
download | scala-57261cf375a8442a267b918ed582af526f8491fa.tar.gz scala-57261cf375a8442a267b918ed582af526f8491fa.tar.bz2 scala-57261cf375a8442a267b918ed582af526f8491fa.zip |
Reactor now has type parameter.
Diffstat (limited to 'src/actors/scala/actors/MessageQueue.scala')
-rw-r--r-- | src/actors/scala/actors/MessageQueue.scala | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/src/actors/scala/actors/MessageQueue.scala b/src/actors/scala/actors/MessageQueue.scala index 000ff1bfc6..2c1c2446e6 100644 --- a/src/actors/scala/actors/MessageQueue.scala +++ b/src/actors/scala/actors/MessageQueue.scala @@ -18,14 +18,14 @@ package scala.actors */ @serializable @SerialVersionUID(7124278808020037465L) @deprecated("this class is going to be removed in a future release") -class MessageQueueElement(msg: Any, session: OutputChannel[Any], next: MessageQueueElement) extends MQueueElement(msg, session, next) { +class MessageQueueElement(msg: Any, session: OutputChannel[Any], next: MessageQueueElement) extends MQueueElement[Any](msg, session, next) { def this() = this(null, null, null) def this(msg: Any, session: OutputChannel[Any]) = this(msg, session, null) } -private[actors] class MQueueElement(val msg: Any, val session: OutputChannel[Any], var next: MQueueElement) { +private[actors] class MQueueElement[Msg >: Null](val msg: Msg, val session: OutputChannel[Any], var next: MQueueElement[Msg]) { def this() = this(null, null, null) - def this(msg: Any, session: OutputChannel[Any]) = this(msg, session, null) + def this(msg: Msg, session: OutputChannel[Any]) = this(msg, session, null) } /** @@ -38,11 +38,11 @@ private[actors] class MQueueElement(val msg: Any, val session: OutputChannel[Any */ @serializable @SerialVersionUID(2168935872884095767L) @deprecated("this class is going to be removed in a future release") -class MessageQueue(label: String) extends MQueue(label) +class MessageQueue(label: String) extends MQueue[Any](label) -private[actors] class MQueue(protected val label: String) { - protected var first: MQueueElement = null - protected var last: MQueueElement = null // last eq null iff list is empty +private[actors] class MQueue[Msg >: Null](protected val label: String) { + protected var first: MQueueElement[Msg] = null + protected var last: MQueueElement[Msg] = null // last eq null iff list is empty private var _size = 0 def size = _size @@ -52,7 +52,7 @@ private[actors] class MQueue(protected val label: String) { _size += diff } - def append(msg: Any, session: OutputChannel[Any]) { + def append(msg: Msg, session: OutputChannel[Any]) { changeSize(1) // size always increases by 1 val el = new MQueueElement(msg, session) @@ -62,7 +62,7 @@ private[actors] class MQueue(protected val label: String) { last = el } - def append(el: MQueueElement) { + def append(el: MQueueElement[Msg]) { changeSize(1) // size always increases by 1 if (isEmpty) first = el @@ -71,7 +71,7 @@ private[actors] class MQueue(protected val label: String) { last = el } - def foreach(f: (Any, OutputChannel[Any]) => Unit) { + def foreach(f: (Msg, OutputChannel[Any]) => Unit) { var curr = first while (curr != null) { f(curr.msg, curr.session) @@ -79,7 +79,7 @@ private[actors] class MQueue(protected val label: String) { } } - def foreachAppend(target: MQueue) { + def foreachAppend(target: MQueue[Msg]) { var curr = first while (curr != null) { target.append(curr) @@ -87,7 +87,7 @@ private[actors] class MQueue(protected val label: String) { } } - def foreachDequeue(target: MQueue) { + def foreachDequeue(target: MQueue[Msg]) { var curr = first while (curr != null) { target.append(curr) @@ -98,7 +98,7 @@ private[actors] class MQueue(protected val label: String) { _size = 0 } - def foldLeft[B](z: B)(f: (B, Any) => B): B = { + def foldLeft[B](z: B)(f: (B, Msg) => B): B = { var acc = z var curr = first while (curr != null) { @@ -111,10 +111,10 @@ private[actors] class MQueue(protected val label: String) { /** Returns the n-th message that satisfies the predicate <code>p</code> * without removing it. */ - def get(n: Int)(p: Any => Boolean): Option[Any] = { + def get(n: Int)(p: Msg => Boolean): Option[Msg] = { var pos = 0 - def test(msg: Any): Boolean = + def test(msg: Msg): Boolean = p(msg) && (pos == n || { pos += 1; false }) var curr = first @@ -127,16 +127,16 @@ private[actors] class MQueue(protected val label: String) { /** Removes the n-th message that satisfies the predicate <code>p</code>. */ - def remove(n: Int)(p: (Any, OutputChannel[Any]) => Boolean): Option[(Any, OutputChannel[Any])] = + def remove(n: Int)(p: (Msg, OutputChannel[Any]) => Boolean): Option[(Msg, OutputChannel[Any])] = removeInternal(n)(p) map (x => (x.msg, x.session)) /** Extracts the first message that satisfies the predicate <code>p</code> * or <code>null</code> if <code>p</code> fails for all of them. */ - def extractFirst(p: (Any, OutputChannel[Any]) => Boolean): MQueueElement = + def extractFirst(p: (Msg, OutputChannel[Any]) => Boolean): MQueueElement[Msg] = removeInternal(0)(p) orNull - def extractFirst(pf: PartialFunction[Any, Any]): MQueueElement = { + def extractFirst(pf: PartialFunction[Msg, Any]): MQueueElement[Msg] = { if (isEmpty) // early return return null @@ -173,14 +173,14 @@ private[actors] class MQueue(protected val label: String) { } } - private def removeInternal(n: Int)(p: (Any, OutputChannel[Any]) => Boolean): Option[MQueueElement] = { + private def removeInternal(n: Int)(p: (Msg, OutputChannel[Any]) => Boolean): Option[MQueueElement[Msg]] = { var pos = 0 - def foundMsg(x: MQueueElement) = { + def foundMsg(x: MQueueElement[Msg]) = { changeSize(-1) Some(x) } - def test(msg: Any, session: OutputChannel[Any]): Boolean = + def test(msg: Msg, session: OutputChannel[Any]): Boolean = p(msg, session) && (pos == n || { pos += 1 ; false }) if (isEmpty) // early return @@ -220,7 +220,7 @@ private[actors] class MQueue(protected val label: String) { /** Debugging trait. */ -private[actors] trait MessageQueueTracer extends MQueue +private[actors] trait MessageQueueTracer extends MQueue[Any] { private val queueNumber = MessageQueueTracer.getQueueNumber @@ -238,7 +238,7 @@ private[actors] trait MessageQueueTracer extends MQueue printQueue("REMOVE %s" format res) res } - override def extractFirst(p: (Any, OutputChannel[Any]) => Boolean): MQueueElement = { + override def extractFirst(p: (Any, OutputChannel[Any]) => Boolean): MQueueElement[Any] = { val res = super.extractFirst(p) printQueue("EXTRACT_FIRST %s" format res) res @@ -253,7 +253,7 @@ private[actors] trait MessageQueueTracer extends MQueue override def toString() = "%s:%d".format(label, queueNumber) } -object MessageQueueTracer { +private[actors] object MessageQueueTracer { // for tracing purposes private var queueNumberAssigner = 0 private def getQueueNumber = synchronized { |