import ofc.LogicError
object DirectedGraph {
- import scala.collection.generic.Growable
-
- private trait Queue[A] extends Growable[A] {
- def pop() : A
- def nonEmpty : Boolean
- }
-
- private class StackQueue[A] extends Queue[A] {
- private var stack = List[A]()
-
- def nonEmpty = stack.nonEmpty
-
- def +=(e: A) = {
- stack = (e :: stack)
- this
- }
-
- def pop() = {
- val (head, tail) = (stack.head, stack.tail)
- stack = tail
- head
- }
-
- def clear() {
- stack = Nil
- }
- }
-
- private class PriorityQueue[A](ordering: Ordering[A]) extends Queue[A] {
- val queue = new scala.collection.mutable.PriorityQueue[A]()(ordering)
-
- def nonEmpty = queue.nonEmpty
- def pop() = queue.dequeue()
- def clear() = queue.clear()
-
- def +=(e: A) = {
- queue += e
- this
- }
- }
def topoSort(graph: DirectedGraph) : Seq[DirectedGraph#Vertex] = {
type Vertex = DirectedGraph#Vertex
--- /dev/null
+package ofc.util
+import scala.collection.generic.Growable
+
+private trait Queue[A] extends Growable[A] {
+ def pop() : A
+ def nonEmpty : Boolean
+}
+
+private class StackQueue[A] extends Queue[A] {
+ private var stack = List[A]()
+
+ def nonEmpty = stack.nonEmpty
+
+ def +=(e: A) = {
+ stack = (e :: stack)
+ this
+ }
+
+ def pop() = {
+ val (head, tail) = (stack.head, stack.tail)
+ stack = tail
+ head
+ }
+
+ def clear() {
+ stack = Nil
+ }
+}
+
+private class PriorityQueue[A](ordering: Ordering[A]) extends Queue[A] {
+ val queue = new scala.collection.mutable.PriorityQueue[A]()(ordering)
+
+ def nonEmpty = queue.nonEmpty
+ def pop() = queue.dequeue()
+ def clear() = queue.clear()
+
+ def +=(e: A) = {
+ queue += e
+ this
+ }
+}
+