summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/immutable/TreeSet.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-05-08 16:33:15 +0000
committerMartin Odersky <odersky@gmail.com>2009-05-08 16:33:15 +0000
commit14a631a5fec42d04d0723355a0b93e482b5e4662 (patch)
treef639c2a22e89e193b9abea391993ecfd4d5326ee /src/library/scala/collection/immutable/TreeSet.scala
parent2379eb4ebbd28c8892b50a1d9fa8a687099eea4d (diff)
downloadscala-14a631a5fec42d04d0723355a0b93e482b5e4662.tar.gz
scala-14a631a5fec42d04d0723355a0b93e482b5e4662.tar.bz2
scala-14a631a5fec42d04d0723355a0b93e482b5e4662.zip
massive new collections checkin.
Diffstat (limited to 'src/library/scala/collection/immutable/TreeSet.scala')
-rw-r--r--src/library/scala/collection/immutable/TreeSet.scala49
1 files changed, 21 insertions, 28 deletions
diff --git a/src/library/scala/collection/immutable/TreeSet.scala b/src/library/scala/collection/immutable/TreeSet.scala
index 44e50c29a2..49c2578c29 100644
--- a/src/library/scala/collection/immutable/TreeSet.scala
+++ b/src/library/scala/collection/immutable/TreeSet.scala
@@ -11,17 +11,22 @@
package scala.collection.immutable
-/** The canonical factory of <a href="TreeSet.html">TreeSet</a>'s. */
+import generic._
+/** The canonical factory of <a href="TreeSet.html">TreeSet</a>'s. */
object TreeSet {
+ type Coll = TreeSet[_]
+ implicit def implicitBuilder[A <% Ordered[A]]: Builder[A, TreeSet[A], Coll] = newBuilder[A]
+ def newBuilder[A <% Ordered[A]]: Builder[A, TreeSet[A], Any] = new AddingBuilder(empty[A])
+
/** The empty set of this type
*/
def empty[A <% Ordered[A]] = new TreeSet[A]
/** The canonical factory for this type
*/
- def apply[A <% Ordered[A]](elems: A*) : SortedSet[A] = empty[A] ++ elems
+ def apply[A <% Ordered[A]](elems: A*) : TreeSet[A] = empty[A] ++ elems
}
/** This class implements immutable sets using a tree.
@@ -31,8 +36,8 @@ object TreeSet {
*/
@serializable
-class TreeSet[A <% Ordered[A]](val size: Int, t: RedBlack[A]#Tree[Unit])
- extends RedBlack[A] with SortedSet[A] {
+class TreeSet[A <% Ordered[A]](override val size: Int, t: RedBlack[A]#Tree[Unit])
+ extends RedBlack[A] with SortedSet[A] with SortedSetTemplate[A, TreeSet[A]] {
def isSmaller(x: A, y: A) = x < y
@@ -42,9 +47,9 @@ class TreeSet[A <% Ordered[A]](val size: Int, t: RedBlack[A]#Tree[Unit])
private def newSet(s: Int, t: RedBlack[A]#Tree[Unit]) = new TreeSet[A](s, t)
- /** A factory to create empty maps of the same type of keys.
+ /** A factory to create empty sets of the same type of keys.
*/
- def empty[B]: Set[B] = ListSet.empty[B]
+ override def empty = TreeSet.empty
/** A new TreeSet with the entry added is returned,
*/
@@ -77,29 +82,17 @@ class TreeSet[A <% Ordered[A]](val size: Int, t: RedBlack[A]#Tree[Unit])
*
* @return the new iterator
*/
- def elements: Iterator[A] = tree.elements.elements map (_._1)
+ def elements: Iterator[A] = tree.toStream.elements map (_._1)
- def elementsSlow = tree.elementsSlow map (_._1)
+ override def toStream: Stream[A] = tree.toStream map (_._1)
- override def foreach(f: A => Unit) {
- tree.visit[Unit](())((unit0, y, unit1) => Tuple2(true, f(y)))
- }
+ override def foreach(f: A => Unit) = tree foreach { (x, y) => f(x) }
- override def forall(f: A => Boolean): Boolean =
- tree.visit[Boolean](true)((input, a, unit) => f(a) match {
- case ret if input => Tuple2(ret, ret)
- })._2
-
- override def exists(f: A => Boolean): Boolean =
- tree.visit[Boolean](false)((input, a, unit) => f(a) match {
- case ret if !input => Tuple2(!ret, ret)
- })._2
-
- override def rangeImpl(from: Option[A], until: Option[A]): TreeSet[A] = {
- val tree = this.tree.range(from, until)
- newSet(tree.count, tree)
- }
- override def firstKey = tree.first
- override def lastKey = tree.last
- override def compare(a0: A, a1: A) = a0.compare(a1)
+ override def rangeImpl(from: Option[A], until: Option[A]): TreeSet[A] = {
+ val tree = this.tree.range(from, until)
+ newSet(tree.count, tree)
+ }
+ override def firstKey = tree.first
+ override def lastKey = tree.last
+ override def compare(a0: A, a1: A) = a0.compare(a1)
}