ComparableTimeMark and specialized TimeSource KT-54082

- Introduce ComparableTimeMark interface extending TimeMark,
and TimeSource.WithComparableMarks - a time source that returns such time marks.
- Implement ComparableTimeMark in ValueTimeMark and AbstractLong/DoubleTimeMark classes.
This commit is contained in:
Ilya Gorbunov
2022-06-27 23:31:36 +03:00
committed by Space
parent a4b2a8c4ea
commit 57c9d61291
11 changed files with 534 additions and 87 deletions
@@ -9,7 +9,7 @@ import kotlin.time.TimeSource.Monotonic.ValueTimeMark
@SinceKotlin("1.3")
@ExperimentalTime
internal actual object MonotonicTimeSource : TimeSource {
internal actual object MonotonicTimeSource : TimeSource.WithComparableMarks {
private val zero: Long = System.nanoTime()
private fun read(): Long = System.nanoTime() - zero
override fun toString(): String = "TimeSource(System.nanoTime())"
@@ -18,6 +18,9 @@ internal actual object MonotonicTimeSource : TimeSource {
actual fun elapsedFrom(timeMark: ValueTimeMark): Duration =
saturatingDiff(read(), timeMark.reading)
actual fun differenceBetween(one: ValueTimeMark, another: ValueTimeMark): Duration =
saturatingOriginsDiff(one.reading, another.reading)
actual fun adjustReading(timeMark: ValueTimeMark, duration: Duration): ValueTimeMark =
ValueTimeMark(saturatingAdd(timeMark.reading, duration))
}