/* * Copyright 2010-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // a package is omitted to get declarations directly under the module @PublishedApi external internal fun Array(size: Int): Array @JsName("newArray") fun newArray(size: Int, initValue: T) = fillArrayVal(Array(size), initValue) @JsName("newArrayF") inline fun arrayWithFun(size: Int, init: (Int) -> T) = fillArrayFun(Array(size), init) @JsName("fillArray") inline fun fillArrayFun(array: Array, init: (Int) -> T): Array { for (i in 0..array.size - 1) { array[i] = init(i) } return array } @JsName("booleanArray") fun booleanArray(size: Int, init: dynamic): Array { val result: dynamic = Array(size) result.`$type$` = "BooleanArray" return when (init) { null, true -> fillArrayVal(result, false) false -> result else -> fillArrayFun(result, init) } } @JsName("booleanArrayF") inline fun booleanArrayWithFun(size: Int, init: (Int) -> Boolean): Array = fillArrayFun(booleanArray(size, false), init) @JsName("charArray") @Suppress("UNUSED_PARAMETER") fun charArray(size: Int, init: dynamic): Array { val result = js("new Uint16Array(size)") result.`$type$` = "CharArray" return when (init) { null, true, false -> result // For consistency else -> fillArrayFun(result, init) } } @JsName("charArrayF") inline fun charArrayWithFun(size: Int, init: (Int) -> Char): Array { val array = charArray(size, null) for (i in 0..array.size - 1) { val value = init(i) js("array[i] = value;") } return array } @JsName("untypedCharArrayF") inline fun untypedCharArrayWithFun(size: Int, init: (Int) -> Char): Array { val array = Array(size) for (i in 0..array.size - 1) { val value = init(i) js("array[i] = value;") } return array } @JsName("longArray") fun longArray(size: Int, init: dynamic): Array { val result: dynamic = Array(size) result.`$type$` = "LongArray" return when (init) { null, true -> fillArrayVal(result, 0L) false -> result else -> fillArrayFun(result, init) } } @JsName("longArrayF") inline fun longArrayWithFun(size: Int, init: (Int) -> Long): Array = fillArrayFun(longArray(size, false), init) private fun fillArrayVal(array: Array, initValue: T): Array { for (i in 0..array.size - 1) { array[i] = initValue } return array }