blob: a7029acce41790515edde34590e11eef3b1a4957 (
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
|
package moe.nea.firmament.util.collections
import kotlin.math.floor
val ClosedFloatingPointRange<Float>.centre get() = (endInclusive + start) / 2
fun ClosedFloatingPointRange<Float>.nonNegligibleSubSectionsAlignedWith(
interval: Float
): Iterable<Float> {
require(interval.isFinite())
val range = this
return object : Iterable<Float> {
override fun iterator(): Iterator<Float> {
return object : FloatIterator() {
var polledValue: Float = range.start
var lastValue: Float = polledValue
override fun nextFloat(): Float {
if (!hasNext()) throw NoSuchElementException()
lastValue = polledValue
polledValue = Float.NaN
return lastValue
}
override fun hasNext(): Boolean {
if (!polledValue.isNaN()) {
return true
}
if (lastValue == range.endInclusive)
return false
polledValue = (floor(lastValue / interval) + 1) * interval
if (polledValue > range.endInclusive) {
polledValue = range.endInclusive
}
return true
}
}
}
}
}
|