@@ -940,7 +940,14 @@ public fun <T> Array<out T>.copyOf(newSize: Int): Array<T?> {
940
940
*/
941
941
public actual fun ByteArray.copyOf (newSize : Int ): ByteArray {
942
942
require(newSize >= 0 ) { " Invalid new array size: $newSize ." }
943
- return fillFrom(this , ByteArray (newSize))
943
+ val size = this .size
944
+ return when {
945
+ newSize < 16 || size < 16 -> fillFrom(this , ByteArray (newSize))
946
+ newSize > size -> ByteArray (newSize).also { copy ->
947
+ copy.asDynamic().set(this , 0 )
948
+ }
949
+ else -> this .asDynamic().slice(0 , newSize)
950
+ }
944
951
}
945
952
946
953
/* *
@@ -954,7 +961,14 @@ public actual fun ByteArray.copyOf(newSize: Int): ByteArray {
954
961
*/
955
962
public actual fun ShortArray.copyOf (newSize : Int ): ShortArray {
956
963
require(newSize >= 0 ) { " Invalid new array size: $newSize ." }
957
- return fillFrom(this , ShortArray (newSize))
964
+ val size = this .size
965
+ return when {
966
+ newSize < 16 || size < 16 -> fillFrom(this , ShortArray (newSize))
967
+ newSize > size -> ShortArray (newSize).also { copy ->
968
+ copy.asDynamic().set(this , 0 )
969
+ }
970
+ else -> this .asDynamic().slice(0 , newSize)
971
+ }
958
972
}
959
973
960
974
/* *
@@ -968,7 +982,14 @@ public actual fun ShortArray.copyOf(newSize: Int): ShortArray {
968
982
*/
969
983
public actual fun IntArray.copyOf (newSize : Int ): IntArray {
970
984
require(newSize >= 0 ) { " Invalid new array size: $newSize ." }
971
- return fillFrom(this , IntArray (newSize))
985
+ val size = this .size
986
+ return when {
987
+ newSize < 16 || size < 16 -> fillFrom(this , IntArray (newSize))
988
+ newSize > size -> IntArray (newSize).also { copy ->
989
+ copy.asDynamic().set(this , 0 )
990
+ }
991
+ else -> this .asDynamic().slice(0 , newSize)
992
+ }
972
993
}
973
994
974
995
/* *
@@ -996,7 +1017,14 @@ public actual fun LongArray.copyOf(newSize: Int): LongArray {
996
1017
*/
997
1018
public actual fun FloatArray.copyOf (newSize : Int ): FloatArray {
998
1019
require(newSize >= 0 ) { " Invalid new array size: $newSize ." }
999
- return fillFrom(this , FloatArray (newSize))
1020
+ val size = this .size
1021
+ return when {
1022
+ newSize < 16 || size < 16 -> fillFrom(this , FloatArray (newSize))
1023
+ newSize > size -> FloatArray (newSize).also { copy ->
1024
+ copy.asDynamic().set(this , 0 )
1025
+ }
1026
+ else -> this .asDynamic().slice(0 , newSize)
1027
+ }
1000
1028
}
1001
1029
1002
1030
/* *
@@ -1010,7 +1038,14 @@ public actual fun FloatArray.copyOf(newSize: Int): FloatArray {
1010
1038
*/
1011
1039
public actual fun DoubleArray.copyOf (newSize : Int ): DoubleArray {
1012
1040
require(newSize >= 0 ) { " Invalid new array size: $newSize ." }
1013
- return fillFrom(this , DoubleArray (newSize))
1041
+ val size = this .size
1042
+ return when {
1043
+ newSize < 16 || size < 16 -> fillFrom(this , DoubleArray (newSize))
1044
+ newSize > size -> DoubleArray (newSize).also { copy ->
1045
+ copy.asDynamic().set(this , 0 )
1046
+ }
1047
+ else -> this .asDynamic().slice(0 , newSize)
1048
+ }
1014
1049
}
1015
1050
1016
1051
/* *
@@ -1038,7 +1073,15 @@ public actual fun BooleanArray.copyOf(newSize: Int): BooleanArray {
1038
1073
*/
1039
1074
public actual fun CharArray.copyOf (newSize : Int ): CharArray {
1040
1075
require(newSize >= 0 ) { " Invalid new array size: $newSize ." }
1041
- return withType(" CharArray" , fillFrom(this , CharArray (newSize)))
1076
+ val size = this .size
1077
+ val copy = when {
1078
+ newSize < 16 || size < 16 -> fillFrom(this , CharArray (newSize))
1079
+ newSize > size -> CharArray (newSize).also { copy ->
1080
+ copy.asDynamic().set(this , 0 )
1081
+ }
1082
+ else -> this .asDynamic().slice(0 , newSize)
1083
+ }
1084
+ return withType(" CharArray" , copy)
1042
1085
}
1043
1086
1044
1087
/* *
0 commit comments