Added Rings for Int and Short
This commit is contained in:
parent
83e24acdc5
commit
2bf34f2a07
@ -32,7 +32,7 @@ inline class Real(val value: Double) : FieldElement<Double, Real, RealField> {
|
|||||||
/**
|
/**
|
||||||
* A field for double without boxing. Does not produce appropriate field element
|
* A field for double without boxing. Does not produce appropriate field element
|
||||||
*/
|
*/
|
||||||
object RealField : AbstractField<Double>(),ExtendedField<Double>, Norm<Double, Double> {
|
object RealField : AbstractField<Double>(), ExtendedField<Double>, Norm<Double, Double> {
|
||||||
override val zero: Double = 0.0
|
override val zero: Double = 0.0
|
||||||
override fun add(a: Double, b: Double): Double = a + b
|
override fun add(a: Double, b: Double): Double = a + b
|
||||||
override fun multiply(a: Double, @Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE") b: Double): Double = a * b
|
override fun multiply(a: Double, @Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE") b: Double): Double = a * b
|
||||||
@ -52,15 +52,25 @@ object RealField : AbstractField<Double>(),ExtendedField<Double>, Norm<Double, D
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A field for double without boxing. Does not produce appropriate field element
|
* A field for [Int] without boxing. Does not produce corresponding field element
|
||||||
*/
|
*/
|
||||||
object IntField : Field<Int> {
|
object IntRing : Ring<Int> {
|
||||||
override val zero: Int = 0
|
override val zero: Int = 0
|
||||||
override fun add(a: Int, b: Int): Int = a + b
|
override fun add(a: Int, b: Int): Int = a + b
|
||||||
override fun multiply(a: Int, b: Int): Int = a * b
|
override fun multiply(a: Int, b: Int): Int = a * b
|
||||||
override fun multiply(a: Int, k: Double): Int = (k * a).toInt()
|
override fun multiply(a: Int, k: Double): Int = (k * a).toInt()
|
||||||
override val one: Int = 1
|
override val one: Int = 1
|
||||||
override fun divide(a: Int, b: Int): Int = a / b
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A field for [Short] without boxing. Does not produce appropriate field element
|
||||||
|
*/
|
||||||
|
object ShortRing : Ring<Short> {
|
||||||
|
override val zero: Short = 0
|
||||||
|
override fun add(a: Short, b: Short): Short = (a + b).toShort()
|
||||||
|
override fun multiply(a: Short, b: Short): Short = (a * b).toShort()
|
||||||
|
override fun multiply(a: Short, k: Double): Short = (a * k).toShort()
|
||||||
|
override val one: Short = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
//interface FieldAdapter<T, R> : Field<R> {
|
//interface FieldAdapter<T, R> : Field<R> {
|
||||||
|
@ -32,7 +32,6 @@ interface NDField<T, F : Field<T>, N : NDStructure<T>> : Field<N> {
|
|||||||
* Create a nd-field for [Double] values
|
* Create a nd-field for [Double] values
|
||||||
*/
|
*/
|
||||||
fun real(shape: IntArray) = RealNDField(shape)
|
fun real(shape: IntArray) = RealNDField(shape)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a nd-field with boxing generic buffer
|
* Create a nd-field with boxing generic buffer
|
||||||
*/
|
*/
|
||||||
@ -42,12 +41,11 @@ interface NDField<T, F : Field<T>, N : NDStructure<T>> : Field<N> {
|
|||||||
/**
|
/**
|
||||||
* Create a most suitable implementation for nd-field using reified class.
|
* Create a most suitable implementation for nd-field using reified class.
|
||||||
*/
|
*/
|
||||||
inline fun <reified T : Any, F : Field<T>> auto(shape: IntArray, field: F): StridedNDField<T, F> =
|
|
||||||
if (T::class == Double::class) {
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
real(shape) as StridedNDField<T, F>
|
inline fun <reified T : Any, F : Field<T>> auto(shape: IntArray, field: F): StridedNDField<T, F> =
|
||||||
} else {
|
when {
|
||||||
BufferNDField(shape, field, Buffer.Companion::auto)
|
T::class == Double::class -> real(shape) as StridedNDField<T, F>
|
||||||
|
else -> BufferNDField(shape, field, Buffer.Companion::auto)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user