diff options
author | Martin Odersky <odersky@gmail.com> | 2009-05-22 15:13:22 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-05-22 15:13:22 +0000 |
commit | 22b60f2f2b6dbacbd528d10cb18da8e5afe750da (patch) | |
tree | d4cf7da9ae04026febcaeb779f22a3b10aaf7b4e /src/compiler/scala/tools/nsc/util/WorkScheduler.scala | |
parent | 182a5cbf022de71b7fd89d996ab1a922aa6e7602 (diff) | |
download | scala-22b60f2f2b6dbacbd528d10cb18da8e5afe750da.tar.gz scala-22b60f2f2b6dbacbd528d10cb18da8e5afe750da.tar.bz2 scala-22b60f2f2b6dbacbd528d10cb18da8e5afe750da.zip |
some documentation; statistics wrt implicits; n...
some documentation; statistics wrt implicits; new presentation compiler
Diffstat (limited to 'src/compiler/scala/tools/nsc/util/WorkScheduler.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/util/WorkScheduler.scala | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/util/WorkScheduler.scala b/src/compiler/scala/tools/nsc/util/WorkScheduler.scala new file mode 100644 index 0000000000..7bcd3b7a8e --- /dev/null +++ b/src/compiler/scala/tools/nsc/util/WorkScheduler.scala @@ -0,0 +1,43 @@ +package scala.tools.nsc.util + +import scala.collection.mutable.Queue + +class WorkScheduler { + + type Action = () => Unit + + private var todo = new Queue[Action] + + /** Called from server */ + def waitForMoreWork() = synchronized { + do { wait() } while (todo.isEmpty) + } + + /** called from Server */ + def moreWork(): Boolean = synchronized { + todo.nonEmpty + } + + /** Called from server */ + def nextWorkItem(): Option[Action] = synchronized { + if (!todo.isEmpty) Some(todo.dequeue()) else None + } + + /** Called from client */ + def postWorkItem(action: Action) { + todo enqueue action + notify() + } + + /** Called from client */ + def cancel() = synchronized { + todo.clear() + } + + /** Called from client */ + def raise(exc: Exception) = synchronized { + todo.clear() + todo enqueue (() => throw exc) + } +} + |