summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/util/WorkScheduler.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-05-22 15:13:22 +0000
committerMartin Odersky <odersky@gmail.com>2009-05-22 15:13:22 +0000
commit22b60f2f2b6dbacbd528d10cb18da8e5afe750da (patch)
treed4cf7da9ae04026febcaeb779f22a3b10aaf7b4e /src/compiler/scala/tools/nsc/util/WorkScheduler.scala
parent182a5cbf022de71b7fd89d996ab1a922aa6e7602 (diff)
downloadscala-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.scala43
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)
+ }
+}
+