blob: 12c3e9fc389bf808d92ae7bd81be289a86543ddc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package io.dico.parcels2.util.math
fun Double.floor(): Int {
val down = toInt()
if (down.toDouble() != this && (java.lang.Double.doubleToRawLongBits(this).ushr(63).toInt()) == 1) {
return down - 1
}
return down
}
infix fun Int.umod(divisor: Int): Int {
val out = this % divisor
if (out < 0) {
return out + divisor
}
return out
}
val Int.even: Boolean get() = and(1) == 0
fun IntRange.clamp(min: Int, max: Int): IntRange {
if (first < min) {
if (last > max) {
return IntRange(min, max)
}
return IntRange(min, last)
}
if (last > max) {
return IntRange(first, max)
}
return this
}
// the name coerceAtMost is bad
fun Int.clampMax(max: Int) = coerceAtMost(max)
fun Double.clampMin(min: Double) = coerceAtLeast(min)
fun Double.clampMax(max: Double) = coerceAtMost(max)
// Why does this not exist?
infix fun Int.ceilDiv(divisor: Int): Int {
return -Math.floorDiv(-this, divisor)
}
|