commonMain.io.islandtime.ranges.TimePointIterators.kt Maven / Gradle / Ivy
package io.islandtime.ranges
import io.islandtime.base.TimePoint
import io.islandtime.measures.*
abstract class TimePointIterator> : Iterator {
override fun next() = nextTimePoint()
abstract fun nextTimePoint(): T
}
internal class TimePointSecondProgressionIterator>(
first: T,
last: T,
private val step: LongSeconds
) : TimePointIterator() {
private val finalElement = last
private var hasNext = if (step.isPositive()) last > first else last < first
private var next = if (hasNext) first else finalElement
override fun hasNext() = hasNext
override fun nextTimePoint(): T {
val value = next
if (value.isSameInstantAs(finalElement)) {
if (!hasNext) {
throw NoSuchElementException()
}
hasNext = false
} else {
next += step
}
return value
}
}
internal class TimePointNanosecondProgressionIterator>(
first: T,
last: T,
private val step: LongNanoseconds
) : TimePointIterator() {
private val finalElement = last
private var hasNext = if (step.isPositive()) last > first else last < first
private var next = if (hasNext) first else finalElement
override fun hasNext() = hasNext
override fun nextTimePoint(): T {
val value = next
if (value.isSameInstantAs(finalElement)) {
if (!hasNext) {
throw NoSuchElementException()
}
hasNext = false
} else {
next += step
}
return value
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy