diff options
author | Martin Odersky <odersky@gmail.com> | 2009-05-08 16:33:15 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-05-08 16:33:15 +0000 |
commit | 14a631a5fec42d04d0723355a0b93e482b5e4662 (patch) | |
tree | f639c2a22e89e193b9abea391993ecfd4d5326ee /src/library/scala/collection/immutable/TreeSet.scala | |
parent | 2379eb4ebbd28c8892b50a1d9fa8a687099eea4d (diff) | |
download | scala-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.scala | 49 |
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) } |