summaryrefslogtreecommitdiff
path: root/src/library/scala/math/Ordering.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-12-21 05:08:17 +0000
committerPaul Phillips <paulp@improving.org>2010-12-21 05:08:17 +0000
commita887c83972cd1d4110d7ca17d982ee77f68ab0f0 (patch)
tree411a696eaa68303f241f53c8b0814c56453e37db /src/library/scala/math/Ordering.scala
parent3bfd81869ccffd0657a1b82eb483e0f26a283a46 (diff)
downloadscala-a887c83972cd1d4110d7ca17d982ee77f68ab0f0.tar.gz
scala-a887c83972cd1d4110d7ca17d982ee77f68ab0f0.tar.bz2
scala-a887c83972cd1d4110d7ca17d982ee77f68ab0f0.zip
An Ordering for Seq and all of its descendents.
small, very focused taste of Ordering contravariance. No review.
Diffstat (limited to 'src/library/scala/math/Ordering.scala')
-rw-r--r--src/library/scala/math/Ordering.scala15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/library/scala/math/Ordering.scala b/src/library/scala/math/Ordering.scala
index 392cbf5e81..c64b3290f0 100644
--- a/src/library/scala/math/Ordering.scala
+++ b/src/library/scala/math/Ordering.scala
@@ -234,6 +234,21 @@ object Ordering extends LowPriorityOrderingImplicits {
}
}
+ implicit def SeqDerived[CC[X] <: collection.Seq[X], T](implicit ord: Ordering[T]): Ordering[CC[T]] =
+ new Ordering[CC[T]] {
+ def compare(x: CC[T], y: CC[T]): Int = {
+ val xe = x.iterator
+ val ye = y.iterator
+
+ while (xe.hasNext && ye.hasNext) {
+ val res = ord.compare(xe.next, ye.next)
+ if (res != 0) return res
+ }
+
+ Boolean.compare(xe.hasNext, ye.hasNext)
+ }
+ }
+
implicit def Tuple2[T1, T2](implicit ord1: Ordering[T1], ord2: Ordering[T2]): Ordering[(T1, T2)] =
new Ordering[(T1, T2)]{
def compare(x: (T1, T2), y: (T1, T2)): Int = {