Typy nowe

This commit is contained in:
Adam Lemiesz 2022-03-14 19:01:08 +01:00
parent 7690e4cdc4
commit 619a921b1e
10 changed files with 90 additions and 2 deletions

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>

View File

@ -26,6 +26,10 @@ interface LabelsKLib {
val ampere: String
val tesla: String
val lux: String
val second: String
val hour: String
@ -35,6 +39,13 @@ interface LabelsKLib {
val degree: String
val percent: String
val double: String
val hz: String
val bpm: String
val mega: String
val kilo: String
val hecto: String

View File

@ -10,3 +10,4 @@ interface AngleI : TypedDouble
data class Angle(override val value: Double) : AngleI
val deg: NotSiUnit<AngleI> = notSiUnit({ degree }, 1.0) { Angle(it) }
val rad: NotSiUnit<AngleI> = notSiUnit({ "rad" }, 0.01745329252) { Angle(it) }

View File

@ -0,0 +1,11 @@
package org.lemiesz.klib.types
import org.lemiesz.klib.types.lib.NotSiUnit
import org.lemiesz.klib.types.lib.TypedDouble
import org.lemiesz.klib.types.lib.notSiUnit
//@JvmInline
data class GenericDouble(override val value: Double) : TypedDouble
val double: NotSiUnit<GenericDouble> = notSiUnit({ double }, 1.0) { GenericDouble(it) }

View File

@ -0,0 +1,11 @@
package org.lemiesz.klib.types
import org.lemiesz.klib.types.lib.TypedDouble
import org.lemiesz.klib.types.lib.notSiUnit
import org.lemiesz.klib.types.lib.siUnit
@JvmInline
value class Frequency(override val value: Double) : TypedDouble
val Hz = siUnit({ hz }, 1.0) { Frequency(it) }
val bpm = notSiUnit({ bpm }, 0.01666666667) { Frequency(it) }

View File

@ -0,0 +1,9 @@
package org.lemiesz.klib.types
import org.lemiesz.klib.types.lib.TypedDouble
import org.lemiesz.klib.types.lib.siUnit
@JvmInline
value class Illuminance(override val value: Double) : TypedDouble
val lux = siUnit({ lux }, 1.0) { Illuminance(it) }

View File

@ -0,0 +1,9 @@
package org.lemiesz.klib.types
import org.lemiesz.klib.types.lib.TypedDouble
import org.lemiesz.klib.types.lib.siUnit
@JvmInline
value class Magnetic(override val value: Double) : TypedDouble
val T = siUnit({ tesla }, 1.0) { Magnetic(it) }

View File

@ -0,0 +1,11 @@
package org.lemiesz.klib.types
import org.lemiesz.klib.types.lib.NotSiUnit
import org.lemiesz.klib.types.lib.TypedDouble
import org.lemiesz.klib.types.lib.notSiUnit
//@JvmInline
data class Percent(override val value: Double) : TypedDouble
val percent: NotSiUnit<GenericDouble> = notSiUnit({ percent }, 1.0) { GenericDouble(it) }

View File

@ -0,0 +1,24 @@
package org.lemiesz.klib.types
import org.lemiesz.klib.flow.combineStateFlow
import org.lemiesz.klib.types.lib.*
//@JvmInline
data class RotationRate(override val value: Double) : TypedDouble
val radS = rad / s
val degS = deg / s
operator fun <T : AngleI> MultiplierUnit<T>.div(divider: MultiplierUnit<TimeSpan>) = NotSiUnit(
label = {
label().combineStateFlow(this, divider.label(this)) { s1, s2 ->
"$s1/$s2"
}
},
multiplier = multiplier / divider.multiplier
) {
RotationRate(it)
}

View File

@ -26,5 +26,5 @@ val hecto = UnitModifier(100.0) { hecto }
val deca = UnitModifier(10.0) { deca }
val centi = UnitModifier(0.01) { centi }
val milli = UnitModifier(0.001) { milli }
val micro = UnitModifier(0.000_001) { milli }
val nano = UnitModifier(0.000_000_001) { milli }
val micro = UnitModifier(0.000_001) { micro }
val nano = UnitModifier(0.000_000_001) { nano }