1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
// a package is omitted to get declarations directly under the module
@PublishedApi
external internal fun <T> Array(size: Int): Array<T>
@JsName("newArray")
fun <T> newArray(size: Int, initValue: T) = fillArrayVal(Array<T>(size), initValue)
@JsName("newArrayF")
inline fun <T> arrayWithFun(size: Int, init: (Int) -> T) = fillArrayFun(Array<T>(size), init)
@JsName("fillArray")
inline fun <T> fillArrayFun(array: Array<T>, init: (Int) -> T): Array<T> {
for (i in 0..array.size - 1) {
array[i] = init(i)
}
return array
}
@JsName("booleanArray")
fun booleanArray(size: Int, init: dynamic): Array<Boolean> {
val result: dynamic = Array<Boolean>(size)
result.`$type$` = "BooleanArray"
return when (init) {
null, true -> fillArrayVal(result, false)
false -> result
else -> fillArrayFun<Boolean>(result, init)
}
}
@JsName("booleanArrayF")
inline fun booleanArrayWithFun(size: Int, init: (Int) -> Boolean): Array<Boolean> = fillArrayFun(booleanArray(size, false), init)
@JsName("charArray")
@Suppress("UNUSED_PARAMETER")
fun charArray(size: Int, init: dynamic): Array<Char> {
val result = js("new Uint16Array(size)")
result.`$type$` = "CharArray"
return when (init) {
null, true, false -> result // For consistency
else -> fillArrayFun<Char>(result, init)
}
}
@JsName("charArrayF")
inline fun charArrayWithFun(size: Int, init: (Int) -> Char): Array<Char> {
val array = charArray(size, null)
for (i in 0..array.size - 1) {
@Suppress("UNUSED_VARIABLE") // used in js block
val value = init(i)
js("array[i] = value;")
}
return array
}
@JsName("untypedCharArrayF")
inline fun untypedCharArrayWithFun(size: Int, init: (Int) -> Char): Array<Char> {
val array = Array<Char>(size)
for (i in 0..array.size - 1) {
@Suppress("UNUSED_VARIABLE") // used in js block
val value = init(i)
js("array[i] = value;")
}
return array
}
@JsName("longArray")
fun longArray(size: Int, init: dynamic): Array<Long> {
val result: dynamic = Array<Long>(size)
result.`$type$` = "LongArray"
return when (init) {
null, true -> fillArrayVal(result, 0L)
false -> result
else -> fillArrayFun<Long>(result, init)
}
}
@JsName("longArrayF")
inline fun longArrayWithFun(size: Int, init: (Int) -> Long): Array<Long> = fillArrayFun(longArray(size, false), init)
private fun <T> fillArrayVal(array: Array<T>, initValue: T): Array<T> {
for (i in 0..array.size - 1) {
array[i] = initValue
}
return array
}
|