From a887c83972cd1d4110d7ca17d982ee77f68ab0f0 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Tue, 21 Dec 2010 05:08:17 +0000 Subject: An Ordering for Seq and all of its descendents. small, very focused taste of Ordering contravariance. No review. --- src/library/scala/math/Ordering.scala | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src') 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 = { -- cgit v1.2.3