summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorDavid MacIver <david.maciver@gmail.com>2009-06-01 10:22:48 +0000
committerDavid MacIver <david.maciver@gmail.com>2009-06-01 10:22:48 +0000
commit3f8de98f0b0ec0e10864b37016c2318439ce7898 (patch)
tree86682329b12cdd499927954c64718eb7dc845dba /src/library
parente0a4e468b76061840c585824f93163529dce73f6 (diff)
downloadscala-3f8de98f0b0ec0e10864b37016c2318439ce7898.tar.gz
scala-3f8de98f0b0ec0e10864b37016c2318439ce7898.tar.bz2
scala-3f8de98f0b0ec0e10864b37016c2318439ce7898.zip
Modify TreeSet to use Ordering instead of Order...
Modify TreeSet to use Ordering instead of Ordered to bring it inline with TreeMap and improve performance.
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/Ordering.scala4
-rw-r--r--src/library/scala/collection/immutable/TreeSet.scala16
2 files changed, 12 insertions, 8 deletions
diff --git a/src/library/scala/Ordering.scala b/src/library/scala/Ordering.scala
index 1a30e24124..e9af2b8a94 100644
--- a/src/library/scala/Ordering.scala
+++ b/src/library/scala/Ordering.scala
@@ -94,6 +94,10 @@ object Ordering
{
def apply[T](implicit ord : Ordering[T]) = ord
+ def ordered[A <: Ordered[A]] : Ordering[A] = new Ordering[A]{
+ def compare(x : A, y : A) = x.compare(y);
+ }
+
trait UnitOrdering extends Ordering[Unit] {
def compare(x : Unit, y : Unit) = 0;
}
diff --git a/src/library/scala/collection/immutable/TreeSet.scala b/src/library/scala/collection/immutable/TreeSet.scala
index 151760b2c0..87d0042fdb 100644
--- a/src/library/scala/collection/immutable/TreeSet.scala
+++ b/src/library/scala/collection/immutable/TreeSet.scala
@@ -17,16 +17,16 @@ import generic._
object TreeSet {
type Coll = TreeSet[_]
- implicit def implicitBuilder[A <% Ordered[A]]: Builder[A, TreeSet[A]] = newBuilder[A]
- def newBuilder[A <% Ordered[A]]: Builder[A, TreeSet[A]] = new AddingBuilder(empty[A])
+ implicit def implicitBuilder[A](implicit ordering : Ordering[A]) : Builder[A, TreeSet[A]] = newBuilder[A](ordering)
+ def newBuilder[A](implicit ordering : Ordering[A]) : Builder[A, TreeSet[A]] = new AddingBuilder(empty[A](ordering))
/** The empty set of this type
*/
- def empty[A <% Ordered[A]] = new TreeSet[A]
+ def empty[A](implicit ordering : Ordering[A]) = new TreeSet[A]
/** The canonical factory for this type
*/
- def apply[A <% Ordered[A]](elems: A*) : TreeSet[A] = empty[A] ++ elems
+ def apply[A](elems: A*)(implicit ordering : Ordering[A]) : TreeSet[A] = empty[A] ++ elems
}
/** This class implements immutable sets using a tree.
@@ -36,12 +36,12 @@ object TreeSet {
*/
@serializable
-class TreeSet[A <% Ordered[A]](override val size: Int, t: RedBlack[A]#Tree[Unit])
+class TreeSet[A](override val size: Int, t: RedBlack[A]#Tree[Unit])(implicit val ordering : Ordering[A])
extends RedBlack[A] with SortedSet[A] with SortedSetTemplate[A, TreeSet[A]] {
- def isSmaller(x: A, y: A) = x < y
+ def isSmaller(x: A, y: A) = compare(x,y) < 0
- def this() = this(0, null)
+ def this()(implicit ordering : Ordering[A]) = this(0, null)(ordering)
protected val tree: RedBlack[A]#Tree[Unit] = if (size == 0) Empty else t
@@ -94,5 +94,5 @@ class TreeSet[A <% Ordered[A]](override val size: Int, t: RedBlack[A]#Tree[Unit]
}
override def firstKey = tree.first
override def lastKey = tree.last
- override def compare(a0: A, a1: A) = a0.compare(a1)
+ override def compare(a0: A, a1: A) = ordering.compare(a0, a1);
}