20 lines
574 B
Plaintext
20 lines
574 B
Plaintext
type Comparison<in T> = fun (T, T) : Int
|
|
|
|
fun naturalOrder<in T : Comparable<T>>(a : T, b : T) : Int = a.compareTo(b)
|
|
|
|
fun castingNaturalOrder(a : Object, b : Object) : Int = (a as Comparable<Object>).compareTo(b as Comparable<Object>)
|
|
|
|
enum class ComparisonResult {
|
|
LS; EQ; GR
|
|
}
|
|
|
|
type MatchableComparison<in T> = fun (T, T) : ComparisonResult
|
|
|
|
fun asMatchableComparison<T>(cmp : Comparison<T>) : MatchableComparison<T> = {(a, b) =>
|
|
val res = cmp(a, b)
|
|
if (res == 0) return ComparisonResult.EQ
|
|
if (res < 0) return ComparisonResult.LS
|
|
return ComparisonResult.GR
|
|
}
|
|
|