Compare floating point values asList elements in total order #KT-28753

This commit is contained in:
Abduqodiri Qurbonzoda
2020-03-27 06:09:12 +03:00
parent ba5e643cb2
commit 97c688057d
3 changed files with 46 additions and 16 deletions
@@ -1467,16 +1467,26 @@ object ArrayOps : TemplateGroupBase() {
body { """return ArrayList<T>(this.unsafeCast<Array<Any?>>())""" }
}
val objectLiteralImpl = """
return object : AbstractList<T>(), RandomAccess {
override val size: Int get() = this@asList.size
override fun isEmpty(): Boolean = this@asList.isEmpty()
override fun contains(element: T): Boolean = this@asList.contains(element)
override fun get(index: Int): T = this@asList[index]
override fun indexOf(element: T): Int = this@asList.indexOf(element)
override fun lastIndexOf(element: T): Int = this@asList.lastIndexOf(element)
}
"""
val objectLiteralImpl = if (primitive in PrimitiveType.floatingPointPrimitives) """
return object : AbstractList<T>(), RandomAccess {
override val size: Int get() = this@asList.size
override fun isEmpty(): Boolean = this@asList.isEmpty()
override fun contains(element: T): Boolean = this@asList.any { it.toBits() == element.toBits() }
override fun get(index: Int): T = this@asList[index]
override fun indexOf(element: T): Int = this@asList.indexOfFirst { it.toBits() == element.toBits() }
override fun lastIndexOf(element: T): Int = this@asList.indexOfLast { it.toBits() == element.toBits() }
}
"""
else """
return object : AbstractList<T>(), RandomAccess {
override val size: Int get() = this@asList.size
override fun isEmpty(): Boolean = this@asList.isEmpty()
override fun contains(element: T): Boolean = this@asList.contains(element)
override fun get(index: Int): T = this@asList[index]
override fun indexOf(element: T): Int = this@asList.indexOf(element)
override fun lastIndexOf(element: T): Int = this@asList.lastIndexOf(element)
}
"""
specialFor(ArraysOfPrimitives, ArraysOfUnsigned) {
on(Platform.JVM) {
body { objectLiteralImpl }