Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

52 lines (43 sloc) 1.264 kb
/* NSC -- new Scala compiler
* Copyright 2005-2013 LAMP/EPFL
* @author Martin Odersky
*/
package scala.tools.nsc
package backend
import scala.collection.mutable
/**
* Simple implementation of a worklist algorithm. A processing
* function is applied repeatedly to the first element in the
* worklist, as long as the stack is not empty.
*
* The client class should mix-in this class and initialize the worklist
* field and define the `processElement` method. Then call the `run` method
* providing a function that initializes the worklist.
*
* @author Martin Odersky
* @version 1.0
* @see [[scala.tools.nsc.backend.icode.Linearizers]]
*/
trait WorklistAlgorithm {
type Elem
type WList = mutable.Stack[Elem]
val worklist: WList
/**
* 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.nonEmpty)
processElement(dequeue)
}
/**
* Process the current element from the worklist.
*/
def processElement(e: Elem): Unit
/**
* Remove and return the first element to be processed from the worklist.
*/
def dequeue: Elem
}
Jump to Line
Something went wrong with that request. Please try again.