Make Array.indices extension property, move to stdlib
This is not something that needs to be intrinsified. Note that compiler optimizations are still possible and the fact whether 'indices' is a member or an extension is irrelevant to the optimizer
This commit is contained in:
@@ -1,9 +0,0 @@
|
||||
fun box(): String {
|
||||
val a = Array<Int>(5, {it})
|
||||
val x = a.indices.iterator()
|
||||
while (x.hasNext()) {
|
||||
val i = x.next()
|
||||
if (a[i] != i) return "Fail $i ${a[i]}"
|
||||
}
|
||||
return "OK"
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
fun box(): String {
|
||||
val a = CharArray(5)
|
||||
val x = a.indices.iterator()
|
||||
while (x.hasNext()) {
|
||||
val i = x.next()
|
||||
if (a[i] != 0.toChar()) return "Fail $i ${a[i]}"
|
||||
}
|
||||
return "OK"
|
||||
}
|
||||
@@ -5,55 +5,47 @@ fun foo(a: Any): Int {
|
||||
a.get(0)
|
||||
a.set(0, 1)
|
||||
a.iterator()
|
||||
a.indices
|
||||
return a.size()
|
||||
}
|
||||
if (a is ShortArray) {
|
||||
a.get(0)
|
||||
a.set(0, 1)
|
||||
a.iterator()
|
||||
a.indices
|
||||
return a.size()
|
||||
}
|
||||
if (a is ByteArray) {
|
||||
a.get(0)
|
||||
a.set(0, 1)
|
||||
a.iterator()
|
||||
a.indices
|
||||
return a.size()
|
||||
}
|
||||
if (a is FloatArray) {
|
||||
a.get(0)
|
||||
a.set(0, 1.toFloat())
|
||||
a.iterator()
|
||||
a.indices
|
||||
return a.size()
|
||||
}
|
||||
if (a is DoubleArray) {
|
||||
a.get(0)
|
||||
a.set(0, 1.0)
|
||||
a.iterator()
|
||||
a.indices
|
||||
return a.size()
|
||||
}
|
||||
if (a is BooleanArray) {
|
||||
a.get(0)
|
||||
a.set(0, false)
|
||||
a.iterator()
|
||||
a.indices
|
||||
return a.size()
|
||||
}
|
||||
if (a is CharArray) {
|
||||
a.get(0)
|
||||
a.set(0, 'a')
|
||||
a.iterator()
|
||||
a.indices
|
||||
return a.size()
|
||||
}
|
||||
if (a is Array<*>) {
|
||||
if (a.size() > 0) a.get(0)
|
||||
a.iterator()
|
||||
a.indices
|
||||
return a.size()
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
fun box() : String {
|
||||
val a = arrayOfNulls<String>(3)
|
||||
a[0] = "a"
|
||||
a[1] = "b"
|
||||
a[2] = "c"
|
||||
|
||||
var result = 0
|
||||
for(i in a.indices) {
|
||||
result += i
|
||||
}
|
||||
if (result != 3) return "FAIL"
|
||||
return "OK"
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
fun findPairless(a : IntArray) : Int {
|
||||
@loop for (i in a.indices) {
|
||||
for (j in a.indices) {
|
||||
if (i != j && a[i] == a[j]) continue@loop
|
||||
}
|
||||
return a[i]
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
fun hasDuplicates(a : IntArray) : Boolean {
|
||||
var duplicate = false
|
||||
@loop for (i in a.indices) {
|
||||
for (j in a.indices) {
|
||||
if (i != j && a[i] == a[j]) {
|
||||
duplicate = true
|
||||
break@loop
|
||||
}
|
||||
}
|
||||
}
|
||||
return duplicate
|
||||
}
|
||||
|
||||
fun box() : String {
|
||||
val a = IntArray(5)
|
||||
a[0] = 0
|
||||
a[1] = 0
|
||||
a[2] = 1
|
||||
a[3] = 1
|
||||
a[4] = 5
|
||||
if(findPairless(a) != 5) return "fail"
|
||||
return if(hasDuplicates(a)) "OK" else "fail"
|
||||
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package whats.the.difference
|
||||
import java.util.HashSet
|
||||
|
||||
fun iarray(vararg a : Int) = a // BUG
|
||||
|
||||
val IntArray.indices: IntRange get() = IntRange(0, lastIndex())
|
||||
fun IntArray.lastIndex() = size() - 1
|
||||
|
||||
fun box() : String {
|
||||
|
||||
Reference in New Issue
Block a user