From d246c90b843413b32c22e0a169ba574fcfa94bdb Mon Sep 17 00:00:00 2001 From: pubiqq Date: Thu, 3 Apr 2025 02:20:53 +0300 Subject: [PATCH] Optimize `take()` for arrays ^KT-76501 Fixed --- .../stdlib/common/src/generated/_Arrays.kt | 81 +++---------------- .../stdlib/common/src/generated/_UArrays.kt | 36 +-------- .../src/templates/Filtering.kt | 9 +-- 3 files changed, 14 insertions(+), 112 deletions(-) diff --git a/libraries/stdlib/common/src/generated/_Arrays.kt b/libraries/stdlib/common/src/generated/_Arrays.kt index 9aafae332b447..33f5a57f153fe 100644 --- a/libraries/stdlib/common/src/generated/_Arrays.kt +++ b/libraries/stdlib/common/src/generated/_Arrays.kt @@ -4806,14 +4806,7 @@ public fun Array.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -4828,14 +4821,7 @@ public fun ByteArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -4850,14 +4836,7 @@ public fun ShortArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -4872,14 +4851,7 @@ public fun IntArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -4894,14 +4866,7 @@ public fun LongArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -4916,14 +4881,7 @@ public fun FloatArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -4938,14 +4896,7 @@ public fun DoubleArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -4960,14 +4911,7 @@ public fun BooleanArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -4982,14 +4926,7 @@ public fun CharArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** diff --git a/libraries/stdlib/common/src/generated/_UArrays.kt b/libraries/stdlib/common/src/generated/_UArrays.kt index bf8fa0161475d..509f3d4e2b2c2 100644 --- a/libraries/stdlib/common/src/generated/_UArrays.kt +++ b/libraries/stdlib/common/src/generated/_UArrays.kt @@ -2385,14 +2385,7 @@ public fun UIntArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -2409,14 +2402,7 @@ public fun ULongArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -2433,14 +2419,7 @@ public fun UByteArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** @@ -2457,14 +2436,7 @@ public fun UShortArray.take(n: Int): List { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() } /** diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt index 840191c5f86cb..438da36f89e7a 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt @@ -198,14 +198,7 @@ object Filtering : TemplateGroupBase() { if (n == 0) return emptyList() if (n >= size) return toList() if (n == 1) return listOf(this[0]) - var count = 0 - val list = ArrayList(n) - for (item in this) { - list.add(item) - if (++count == n) - break - } - return list + return copyOfRange(0, n).asList() """ } }