Workaround for JS reflection for dimenstions

This commit is contained in:
Alexander Nozik 2019-12-09 20:56:09 +03:00
parent 169801060b
commit 2d71452341
5 changed files with 19 additions and 6 deletions

View File

@ -19,12 +19,10 @@ interface Dimension {
} }
} }
} }
}
}
inline fun <reified D : Dimension> dim(): UInt { expect inline fun <reified D : Dimension> Dimension.Companion.dim(): UInt
return D::class.objectInstance?.dim ?: error("Dimension object must be a singleton")
}
}
}
object D1 : Dimension { object D1 : Dimension {
override val dim: UInt = 1u override val dim: UInt = 1u

View File

@ -66,7 +66,8 @@ interface DPoint<T, D : Dimension> : Point<T> {
/** /**
* Dimension-safe point wrapper * Dimension-safe point wrapper
*/ */
inline class DPointWrapper<T, D : Dimension>(val point: Point<T>) : DPoint<T, D> { inline class DPointWrapper<T, D : Dimension>(val point: Point<T>) :
DPoint<T, D> {
override val size: Int get() = point.size override val size: Int get() = point.size
override fun get(index: Int): T = point[index] override fun get(index: Int): T = point[index]
@ -94,7 +95,12 @@ inline class DMatrixContext<T : Any, Ri : Ring<T>>(val context: GenericMatrixCon
inline fun <reified D : Dimension> point(noinline initializer: (Int) -> T): DPoint<T, D> { inline fun <reified D : Dimension> point(noinline initializer: (Int) -> T): DPoint<T, D> {
val size = Dimension.dim<D>() val size = Dimension.dim<D>()
return DPoint.coerceUnsafe(context.point(size.toInt(), initializer)) return DPoint.coerceUnsafe(
context.point(
size.toInt(),
initializer
)
)
} }
inline infix fun <reified R1 : Dimension, reified C1 : Dimension, reified C2 : Dimension> DMatrix<T, R1, C1>.dot( inline infix fun <reified R1 : Dimension, reified C1 : Dimension, reified C2 : Dimension> DMatrix<T, R1, C1>.dot(

View File

@ -0,0 +1,5 @@
package scientifik.kmath.dimensions
actual inline fun <reified D : Dimension> Dimension.Companion.dim(): UInt {
TODO("KClass::objectInstance does not work")
}

View File

@ -0,0 +1,4 @@
package scientifik.kmath.dimensions
actual inline fun <reified D : Dimension> Dimension.Companion.dim(): UInt =
D::class.objectInstance?.dim ?: error("Dimension object must be a singleton")