diff options
author | Paul Phillips <paulp@improving.org> | 2010-12-21 05:08:17 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-12-21 05:08:17 +0000 |
commit | a887c83972cd1d4110d7ca17d982ee77f68ab0f0 (patch) | |
tree | 411a696eaa68303f241f53c8b0814c56453e37db /src | |
parent | 3bfd81869ccffd0657a1b82eb483e0f26a283a46 (diff) | |
download | scala-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')
-rw-r--r-- | src/library/scala/math/Ordering.scala | 15 |
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 = { |