summaryrefslogtreecommitdiff
path: root/src/actors/scala/actors/MessageQueue.scala
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2010-03-08 15:01:53 +0000
committerPhilipp Haller <hallerp@gmail.com>2010-03-08 15:01:53 +0000
commit57261cf375a8442a267b918ed582af526f8491fa (patch)
tree7198dd7ee431697803bf865ccb7343aa2f939664 /src/actors/scala/actors/MessageQueue.scala
parent13f24056a444fd5038cebdb294a0959bfe979492 (diff)
downloadscala-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.scala48
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 {