Skip to content

Commit 26ccfa8

Browse files
NthPortallrytz
authored andcommitted
Tweak variance of Ordering.min and .max
1 parent b6982c8 commit 26ccfa8

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

src/library/scala/math/Ordering.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,10 @@ trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializabl
101101
override def equiv(x: T, y: T): Boolean = compare(x, y) == 0
102102

103103
/** Return `x` if `x` >= `y`, otherwise `y`. */
104-
def max(x: T, y: T): T = if (gteq(x, y)) x else y
104+
def max[U <: T](x: U, y: U): U = if (gteq(x, y)) x else y
105105

106106
/** Return `x` if `x` <= `y`, otherwise `y`. */
107-
def min(x: T, y: T): T = if (lteq(x, y)) x else y
107+
def min[U <: T](x: U, y: U): U = if (lteq(x, y)) x else y
108108

109109
/** Return the opposite ordering of this one. */
110110
override def reverse: Ordering[T] = new Ordering[T] {
@@ -115,8 +115,8 @@ trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializabl
115115
override def lt(x: T, y: T) = outer.lt(y, x)
116116
override def gt(x: T, y: T) = outer.gt(y, x)
117117
override def equiv(x: T, y: T) = outer.equiv(y, x)
118-
override def max(x: T, y: T) = outer.min(x, y)
119-
override def min(x: T, y: T) = outer.max(x, y)
118+
override def max[U <: T](x: U, y: U) = outer.min(x, y)
119+
override def min[U <: T](x: U, y: U) = outer.max(x, y)
120120
}
121121

122122
/** Given f, a function from U into T, creates an Ordering[U] whose compare
@@ -363,8 +363,8 @@ object Ordering extends LowPriorityOrderingImplicits {
363363
override def lt(x: Float, y: Float): Boolean = x < y
364364
override def gt(x: Float, y: Float): Boolean = x > y
365365
override def equiv(x: Float, y: Float): Boolean = x == y
366-
override def max(x: Float, y: Float): Float = math.max(x, y)
367-
override def min(x: Float, y: Float): Float = math.min(x, y)
366+
override def max[U <: Float](x: U, y: U): U = math.max(x, y).asInstanceOf[U]
367+
override def min[U <: Float](x: U, y: U): U = math.min(x, y).asInstanceOf[U]
368368
}
369369
implicit object IeeeOrdering extends IeeeOrdering
370370
}
@@ -423,8 +423,8 @@ object Ordering extends LowPriorityOrderingImplicits {
423423
override def lt(x: Double, y: Double): Boolean = x < y
424424
override def gt(x: Double, y: Double): Boolean = x > y
425425
override def equiv(x: Double, y: Double): Boolean = x == y
426-
override def max(x: Double, y: Double): Double = math.max(x, y)
427-
override def min(x: Double, y: Double): Double = math.min(x, y)
426+
override def max[U <: Double](x: U, y: U): U = math.max(x, y).asInstanceOf[U]
427+
override def min[U <: Double](x: U, y: U): U = math.min(x, y).asInstanceOf[U]
428428
}
429429
implicit object IeeeOrdering extends IeeeOrdering
430430
}

0 commit comments

Comments
 (0)