summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Rozendaal <erik@deler.org>2011-12-27 10:23:04 +0100
committerErik Rozendaal <erik@deler.org>2011-12-28 13:12:35 +0100
commitb9699f999da24f72dca65ecfb066b0ac3151f2b5 (patch)
tree1735f46e413d8c81ef9047f1c4da782b18e1a80d
parent6b950741c58938eab922908ac4fb809b7ca68c01 (diff)
downloadscala-b9699f999da24f72dca65ecfb066b0ac3151f2b5.tar.gz
scala-b9699f999da24f72dca65ecfb066b0ac3151f2b5.tar.bz2
scala-b9699f999da24f72dca65ecfb066b0ac3151f2b5.zip
Made RedBlack private to the scala.collection.immutable package.
Use ArrayStack instead of Stack in TreeIterator for slightly increased performance.
-rw-r--r--src/library/scala/collection/immutable/RedBlack.scala7
-rw-r--r--test/files/scalacheck/redblack.scala15
2 files changed, 12 insertions, 10 deletions
diff --git a/src/library/scala/collection/immutable/RedBlack.scala b/src/library/scala/collection/immutable/RedBlack.scala
index 4b81182657..19e0e5ae55 100644
--- a/src/library/scala/collection/immutable/RedBlack.scala
+++ b/src/library/scala/collection/immutable/RedBlack.scala
@@ -15,7 +15,8 @@ package immutable
*
* @since 2.3
*/
-object RedBlack extends Serializable {
+private[immutable]
+object RedBlack {
private def blacken[A, B](t: Tree[A, B]): Tree[A, B] = t match {
case RedTree(k, v, l, r) => BlackTree(k, v, l, r)
@@ -302,8 +303,6 @@ object RedBlack extends Serializable {
}
private[this] class TreeIterator[A, B](tree: NonEmpty[A, B]) extends Iterator[(A, B)] {
- import collection.mutable.Stack
-
override def hasNext: Boolean = !next.isEmpty
override def next: (A, B) = next match {
@@ -326,7 +325,7 @@ object RedBlack extends Serializable {
}
}
- private[this] val path: Stack[NonEmpty[A, B]] = Stack.empty[NonEmpty[A, B]]
+ private[this] val path = mutable.ArrayStack.empty[NonEmpty[A, B]]
addLeftMostBranchToPath(tree)
private[this] var next: Tree[A, B] = path.pop()
}
diff --git a/test/files/scalacheck/redblack.scala b/test/files/scalacheck/redblack.scala
index 011a5d0ca5..78fb645ce8 100644
--- a/test/files/scalacheck/redblack.scala
+++ b/test/files/scalacheck/redblack.scala
@@ -1,3 +1,4 @@
+import collection.immutable._
import org.scalacheck._
import Prop._
import Gen._
@@ -14,11 +15,12 @@ Both children of every red node are black.
Every simple path from a given node to any of its descendant leaves contains the same number of black nodes.
*/
+package scala.collection.immutable {
abstract class RedBlackTest extends Properties("RedBlack") {
def minimumSize = 0
def maximumSize = 5
- import collection.immutable.RedBlack._
+ import RedBlack._
def nodeAt[A](tree: Tree[String, A], n: Int): Option[(String, A)] = if (n < tree.iterator.size && n >= 0)
Some(tree.iterator.drop(n).next)
@@ -64,7 +66,7 @@ abstract class RedBlackTest extends Properties("RedBlack") {
trait RedBlackInvariants {
self: RedBlackTest =>
- import collection.immutable.RedBlack._
+ import RedBlack._
def rootIsBlack[A](t: Tree[String, A]) = t.isBlack
@@ -110,7 +112,7 @@ trait RedBlackInvariants {
}
object TestInsert extends RedBlackTest with RedBlackInvariants {
- import collection.immutable.RedBlack._
+ import RedBlack._
override type ModifyParm = Int
override def genParm(tree: Tree[String, Int]): Gen[ModifyParm] = choose(0, tree.iterator.size + 1)
@@ -130,7 +132,7 @@ object TestInsert extends RedBlackTest with RedBlackInvariants {
}
object TestModify extends RedBlackTest {
- import collection.immutable.RedBlack._
+ import RedBlack._
def newValue = 1
override def minimumSize = 1
@@ -148,7 +150,7 @@ object TestModify extends RedBlackTest {
}
object TestDelete extends RedBlackTest with RedBlackInvariants {
- import collection.immutable.RedBlack._
+ import RedBlack._
override def minimumSize = 1
override type ModifyParm = Int
@@ -165,7 +167,7 @@ object TestDelete extends RedBlackTest with RedBlackInvariants {
}
object TestRange extends RedBlackTest with RedBlackInvariants {
- import collection.immutable.RedBlack._
+ import RedBlack._
override type ModifyParm = (Option[Int], Option[Int])
override def genParm(tree: Tree[String, Int]): Gen[ModifyParm] = for {
@@ -199,6 +201,7 @@ object TestRange extends RedBlackTest with RedBlackInvariants {
filteredTree == newTree.iterator.map(_._1).toList
}
}
+}
object Test extends Properties("RedBlack") {
include(TestInsert)