diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2013-04-03 11:54:35 -0700 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2013-04-03 11:54:35 -0700 |
commit | 1f3137ca5cda9e86c7ff8c095f12cc08f9526649 (patch) | |
tree | 8deb7527bf01219839de456b367b2de3a78decc9 | |
parent | 98ed94678930e336dab3c1b922c44ff6671b4288 (diff) | |
parent | 61308be6dc769257240fdfb32c328a401e82dd85 (diff) | |
download | scala-1f3137ca5cda9e86c7ff8c095f12cc08f9526649.tar.gz scala-1f3137ca5cda9e86c7ff8c095f12cc08f9526649.tar.bz2 scala-1f3137ca5cda9e86c7ff8c095f12cc08f9526649.zip |
Merge pull request #2331 from paulp/pr/iterator-pathology
Take the N^2 out of the compiler's TreeSet.
-rw-r--r-- | src/compiler/scala/tools/nsc/util/TreeSet.scala | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/util/TreeSet.scala b/src/compiler/scala/tools/nsc/util/TreeSet.scala index 3cdbcc5110..d2e9238e8f 100644 --- a/src/compiler/scala/tools/nsc/util/TreeSet.scala +++ b/src/compiler/scala/tools/nsc/util/TreeSet.scala @@ -40,12 +40,22 @@ class TreeSet[T >: Null <: AnyRef](less: (T, T) => Boolean) extends Set[T] { tree = add(tree) } - def iterator = { - def elems(t: Tree): Iterator[T] = { - if (t eq null) Iterator.empty - else elems(t.l) ++ (Iterator single t.elem) ++ elems(t.r) + def iterator = toList.iterator + + override def foreach[U](f: T => U) { + def loop(t: Tree) { + if (t ne null) { + loop(t.l) + f(t.elem) + loop(t.r) + } } - elems(tree) + loop(tree) + } + override def toList = { + val xs = scala.collection.mutable.ListBuffer[T]() + foreach(xs += _) + xs.toList } override def toString(): String = { |