Optimize copying for typed arrays in JS

This commit is contained in:
Ilya Gorbunov
2018-08-23 23:56:48 +03:00
parent ea37a65178
commit b0bcd78e38
@@ -136,6 +136,10 @@ internal fun <T> arrayCopy(source: Array<out T>, destination: Array<in T>, desti
val rangeSize = endIndex - startIndex val rangeSize = endIndex - startIndex
AbstractList.checkRangeIndexes(destinationOffset, destinationOffset + rangeSize, destination.size) AbstractList.checkRangeIndexes(destinationOffset, destinationOffset + rangeSize, destination.size)
if (js("ArrayBuffer").isView(destination) && js("ArrayBuffer").isView(source)) {
val subrange = source.asDynamic().subarray(startIndex, endIndex)
destination.asDynamic().set(subrange, destinationOffset)
} else {
if (source !== destination || destinationOffset <= startIndex) { if (source !== destination || destinationOffset <= startIndex) {
for (index in 0 until rangeSize) { for (index in 0 until rangeSize) {
destination[destinationOffset + index] = source[startIndex + index] destination[destinationOffset + index] = source[startIndex + index]
@@ -145,6 +149,7 @@ internal fun <T> arrayCopy(source: Array<out T>, destination: Array<in T>, desti
destination[destinationOffset + index] = source[startIndex + index] destination[destinationOffset + index] = source[startIndex + index]
} }
} }
}
} }
// no singleton map implementation in js, return map as is // no singleton map implementation in js, return map as is