Coverage Summary for Class: CueDuration (com.vsevolodganin.clicktrack.model)
Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
CueDuration$Beats |
0%
(0/3)
|
0%
(0/10)
|
0%
(0/6)
|
0%
(0/65)
|
CueDuration$Beats$Companion |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/2)
|
CueDuration$Companion |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/44)
|
CueDuration$Measures |
0%
(0/3)
|
0%
(0/10)
|
0%
(0/6)
|
0%
(0/65)
|
CueDuration$Measures$Companion |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/2)
|
CueDuration$Time |
0%
(0/3)
|
0%
(0/10)
|
0%
(0/7)
|
0%
(0/93)
|
CueDuration$Time$Companion |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/2)
|
CueDuration$Type |
0%
(0/1)
|
|
0%
(0/3)
|
0%
(0/24)
|
Total |
0%
(0/14)
|
0%
(0/30)
|
0%
(0/26)
|
0%
(0/297)
|
package com.vsevolodganin.clicktrack.model
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlin.time.Duration
@Serializable
sealed interface CueDuration {
enum class Type {
BEATS,
MEASURES,
TIME,
}
val type: Type
@Serializable
@SerialName("com.vsevolodganin.clicktrack.lib.CueDuration.Beats") // For backward compatibility
data class Beats(val value: Int) : CueDuration {
init {
require(value >= 0) { "Beats count should be non-negative but was: $value" }
}
override val type: Type
get() = Type.BEATS
}
@Serializable
@SerialName("com.vsevolodganin.clicktrack.lib.CueDuration.Measures") // For backward compatibility
data class Measures(val value: Int) : CueDuration {
init {
require(value >= 0) { "Measures count should be non-negative but was: $value" }
}
override val type: Type
get() = Type.MEASURES
}
@Serializable
@SerialName("com.vsevolodganin.clicktrack.lib.CueDuration.Time") // For backward compatibility
data class Time(
@Suppress("DEPRECATION") // Kept legacy serializer for backward compatibility
@Serializable(com.vsevolodganin.clicktrack.utils.time.LegacyDurationSerializer::class)
val value: Duration,
) : CueDuration {
init {
require(value >= Duration.ZERO) { "Time should be non-negative but was: $value" }
}
override val type: Type
get() = Type.TIME
}
}
fun CueDuration.asTimeGiven(tempo: BeatsPerMinute, timeSignature: TimeSignature): Duration {
return when (this) {
is CueDuration.Time -> value
is CueDuration.Beats -> tempo.interval * value
is CueDuration.Measures -> tempo.interval * timeSignature.noteCount * value
}
}