summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichelou <michelou@epfl.ch>2005-09-23 16:58:48 +0000
committermichelou <michelou@epfl.ch>2005-09-23 16:58:48 +0000
commitbd16fac8994986261c92986e70ff5bbc263a1b89 (patch)
tree8548ff556ffbe37162676fe7e6f9f4956e1f0316
parentcb95310d8689cb78b783b13222996938f39cb8ee (diff)
downloadscala-bd16fac8994986261c92986e70ff5bbc263a1b89.tar.gz
scala-bd16fac8994986261c92986e70ff5bbc263a1b89.tar.bz2
scala-bd16fac8994986261c92986e70ff5bbc263a1b89.zip
- initial check-in.
-rw-r--r--sources/scala/tools/nsc/backend/WorklistAlgorithm.scala46
1 files changed, 46 insertions, 0 deletions
diff --git a/sources/scala/tools/nsc/backend/WorklistAlgorithm.scala b/sources/scala/tools/nsc/backend/WorklistAlgorithm.scala
new file mode 100644
index 0000000000..d69f4929ed
--- /dev/null
+++ b/sources/scala/tools/nsc/backend/WorklistAlgorithm.scala
@@ -0,0 +1,46 @@
+/* NSC -- new scala compiler
+ * Copyright 2005 LAMP/EPFL
+ * @author Martin Odersky
+ */
+
+// $Id$
+
+package scala.tools.nsc.backend;
+
+import scala.tools.nsc.ast._;
+import scala.collection.mutable.Queue;
+
+/**
+ * Simple implementation of a worklist algorithm. A processing
+ * function is applied repeatedly to the first element in the
+ * worklist queue, as long as the queue is not empty.
+ *
+ * The client class should mix-in this trait and initialize the
+ * worklist field and define the processElement method. Then call
+ * the 'run' method providing a function that initializes the
+ * worklist.
+ *
+ * @see scala.tools.nsc.backend.icode.Linearizers
+ */
+trait WorklistAlgorithm {
+ type Elem;
+
+ val worklist: Queue[Elem];
+
+ /**
+ * Run the iterative algorithm until the worklist
+ * remains empty. The initializer is run once before
+ * the loop starts and should initialize the worklist.
+ */
+ def run(initWorklist: => Unit) = {
+ initWorklist;
+
+ while (!worklist.isEmpty)
+ processElement(worklist.dequeue);
+ }
+
+ /**
+ * Process the current element from the worklist.
+ */
+ def processElement(e: Elem): Unit;
+}