From 2f1c8a3dfafad335c7933bfe0f130119a9609881 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 24 Jul 2015 05:00:13 +0300 Subject: [PATCH] Remove special case of generation for numeric and toPrimitiveArrays. --- libraries/stdlib/src/generated/_Numeric.kt | 796 +++++++++--------- .../src/generators/GenerateCollections.kt | 21 +- .../kotlin-stdlib-gen/src/templates/Arrays.kt | 2 +- .../src/templates/Numeric.kt | 2 + 4 files changed, 403 insertions(+), 418 deletions(-) diff --git a/libraries/stdlib/src/generated/_Numeric.kt b/libraries/stdlib/src/generated/_Numeric.kt index d5c21a19a87..dee1396fae6 100644 --- a/libraries/stdlib/src/generated/_Numeric.kt +++ b/libraries/stdlib/src/generated/_Numeric.kt @@ -10,154 +10,6 @@ import java.util.* import java.util.Collections // TODO: it's temporary while we have java.util.Collections in js -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfInt") -public fun Iterable.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfInt") -public fun Sequence.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfInt") -public fun Array.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -public fun IntArray.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfLong") -public fun Iterable.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfLong") -public fun Sequence.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfLong") -public fun Array.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -public fun LongArray.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfByte") -public fun Iterable.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfByte") -public fun Sequence.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - /** * Returns an average value of elements in the collection. */ @@ -173,109 +25,6 @@ public fun Array.average(): Double { return if (count == 0) 0.0 else sum / count } -/** - * Returns an average value of elements in the collection. - */ -public fun ByteArray.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfShort") -public fun Iterable.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfShort") -public fun Sequence.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfShort") -public fun Array.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -public fun ShortArray.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfDouble") -public fun Iterable.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - -/** - * Returns an average value of elements in the collection. - */ -platformName("averageOfDouble") -public fun Sequence.average(): Double { - val iterator = iterator() - var sum: Double = 0.0 - var count: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - count += 1 - } - return if (count == 0) 0.0 else sum / count -} - /** * Returns an average value of elements in the collection. */ @@ -291,6 +40,80 @@ public fun Array.average(): Double { return if (count == 0) 0.0 else sum / count } +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfFloat") +public fun Array.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfInt") +public fun Array.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfLong") +public fun Array.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfShort") +public fun Array.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +public fun ByteArray.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + /** * Returns an average value of elements in the collection. */ @@ -305,6 +128,92 @@ public fun DoubleArray.average(): Double { return if (count == 0) 0.0 else sum / count } +/** + * Returns an average value of elements in the collection. + */ +public fun FloatArray.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +public fun IntArray.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +public fun LongArray.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +public fun ShortArray.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfByte") +public fun Iterable.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfDouble") +public fun Iterable.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + /** * Returns an average value of elements in the collection. */ @@ -320,6 +229,81 @@ public fun Iterable.average(): Double { return if (count == 0) 0.0 else sum / count } +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfInt") +public fun Iterable.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfLong") +public fun Iterable.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfShort") +public fun Iterable.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfByte") +public fun Sequence.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfDouble") +public fun Sequence.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + /** * Returns an average value of elements in the collection. */ @@ -338,8 +322,8 @@ public fun Sequence.average(): Double { /** * Returns an average value of elements in the collection. */ -platformName("averageOfFloat") -public fun Array.average(): Double { +platformName("averageOfInt") +public fun Sequence.average(): Double { val iterator = iterator() var sum: Double = 0.0 var count: Int = 0 @@ -353,7 +337,23 @@ public fun Array.average(): Double { /** * Returns an average value of elements in the collection. */ -public fun FloatArray.average(): Double { +platformName("averageOfLong") +public fun Sequence.average(): Double { + val iterator = iterator() + var sum: Double = 0.0 + var count: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + count += 1 + } + return if (count == 0) 0.0 else sum / count +} + +/** + * Returns an average value of elements in the collection. + */ +platformName("averageOfShort") +public fun Sequence.average(): Double { val iterator = iterator() var sum: Double = 0.0 var count: Int = 0 @@ -367,8 +367,8 @@ public fun FloatArray.average(): Double { /** * Returns the sum of all elements in the collection. */ -platformName("sumOfInt") -public fun Iterable.sum(): Int { +platformName("sumOfByte") +public fun Array.sum(): Int { val iterator = iterator() var sum: Int = 0 while (iterator.hasNext()) { @@ -380,10 +380,23 @@ public fun Iterable.sum(): Int { /** * Returns the sum of all elements in the collection. */ -platformName("sumOfInt") -public fun Sequence.sum(): Int { +platformName("sumOfDouble") +public fun Array.sum(): Double { val iterator = iterator() - var sum: Int = 0 + var sum: Double = 0.0 + while (iterator.hasNext()) { + sum += iterator.next() + } + return sum +} + +/** + * Returns the sum of all elements in the collection. + */ +platformName("sumOfFloat") +public fun Array.sum(): Float { + val iterator = iterator() + var sum: Float = 0.0f while (iterator.hasNext()) { sum += iterator.next() } @@ -403,44 +416,6 @@ public fun Array.sum(): Int { return sum } -/** - * Returns the sum of all elements in the collection. - */ -public fun IntArray.sum(): Int { - val iterator = iterator() - var sum: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - } - return sum -} - -/** - * Returns the sum of all elements in the collection. - */ -platformName("sumOfLong") -public fun Iterable.sum(): Long { - val iterator = iterator() - var sum: Long = 0L - while (iterator.hasNext()) { - sum += iterator.next() - } - return sum -} - -/** - * Returns the sum of all elements in the collection. - */ -platformName("sumOfLong") -public fun Sequence.sum(): Long { - val iterator = iterator() - var sum: Long = 0L - while (iterator.hasNext()) { - sum += iterator.next() - } - return sum -} - /** * Returns the sum of all elements in the collection. */ @@ -457,46 +432,8 @@ public fun Array.sum(): Long { /** * Returns the sum of all elements in the collection. */ -public fun LongArray.sum(): Long { - val iterator = iterator() - var sum: Long = 0L - while (iterator.hasNext()) { - sum += iterator.next() - } - return sum -} - -/** - * Returns the sum of all elements in the collection. - */ -platformName("sumOfByte") -public fun Iterable.sum(): Int { - val iterator = iterator() - var sum: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - } - return sum -} - -/** - * Returns the sum of all elements in the collection. - */ -platformName("sumOfByte") -public fun Sequence.sum(): Int { - val iterator = iterator() - var sum: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - } - return sum -} - -/** - * Returns the sum of all elements in the collection. - */ -platformName("sumOfByte") -public fun Array.sum(): Int { +platformName("sumOfShort") +public fun Array.sum(): Int { val iterator = iterator() var sum: Int = 0 while (iterator.hasNext()) { @@ -520,8 +457,31 @@ public fun ByteArray.sum(): Int { /** * Returns the sum of all elements in the collection. */ -platformName("sumOfShort") -public fun Iterable.sum(): Int { +public fun DoubleArray.sum(): Double { + val iterator = iterator() + var sum: Double = 0.0 + while (iterator.hasNext()) { + sum += iterator.next() + } + return sum +} + +/** + * Returns the sum of all elements in the collection. + */ +public fun FloatArray.sum(): Float { + val iterator = iterator() + var sum: Float = 0.0f + while (iterator.hasNext()) { + sum += iterator.next() + } + return sum +} + +/** + * Returns the sum of all elements in the collection. + */ +public fun IntArray.sum(): Int { val iterator = iterator() var sum: Int = 0 while (iterator.hasNext()) { @@ -533,23 +493,9 @@ public fun Iterable.sum(): Int { /** * Returns the sum of all elements in the collection. */ -platformName("sumOfShort") -public fun Sequence.sum(): Int { +public fun LongArray.sum(): Long { val iterator = iterator() - var sum: Int = 0 - while (iterator.hasNext()) { - sum += iterator.next() - } - return sum -} - -/** - * Returns the sum of all elements in the collection. - */ -platformName("sumOfShort") -public fun Array.sum(): Int { - val iterator = iterator() - var sum: Int = 0 + var sum: Long = 0L while (iterator.hasNext()) { sum += iterator.next() } @@ -568,6 +514,19 @@ public fun ShortArray.sum(): Int { return sum } +/** + * Returns the sum of all elements in the collection. + */ +platformName("sumOfByte") +public fun Iterable.sum(): Int { + val iterator = iterator() + var sum: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + } + return sum +} + /** * Returns the sum of all elements in the collection. */ @@ -581,44 +540,6 @@ public fun Iterable.sum(): Double { return sum } -/** - * Returns the sum of all elements in the collection. - */ -platformName("sumOfDouble") -public fun Sequence.sum(): Double { - val iterator = iterator() - var sum: Double = 0.0 - while (iterator.hasNext()) { - sum += iterator.next() - } - return sum -} - -/** - * Returns the sum of all elements in the collection. - */ -platformName("sumOfDouble") -public fun Array.sum(): Double { - val iterator = iterator() - var sum: Double = 0.0 - while (iterator.hasNext()) { - sum += iterator.next() - } - return sum -} - -/** - * Returns the sum of all elements in the collection. - */ -public fun DoubleArray.sum(): Double { - val iterator = iterator() - var sum: Double = 0.0 - while (iterator.hasNext()) { - sum += iterator.next() - } - return sum -} - /** * Returns the sum of all elements in the collection. */ @@ -632,6 +553,71 @@ public fun Iterable.sum(): Float { return sum } +/** + * Returns the sum of all elements in the collection. + */ +platformName("sumOfInt") +public fun Iterable.sum(): Int { + val iterator = iterator() + var sum: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + } + return sum +} + +/** + * Returns the sum of all elements in the collection. + */ +platformName("sumOfLong") +public fun Iterable.sum(): Long { + val iterator = iterator() + var sum: Long = 0L + while (iterator.hasNext()) { + sum += iterator.next() + } + return sum +} + +/** + * Returns the sum of all elements in the collection. + */ +platformName("sumOfShort") +public fun Iterable.sum(): Int { + val iterator = iterator() + var sum: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + } + return sum +} + +/** + * Returns the sum of all elements in the collection. + */ +platformName("sumOfByte") +public fun Sequence.sum(): Int { + val iterator = iterator() + var sum: Int = 0 + while (iterator.hasNext()) { + sum += iterator.next() + } + return sum +} + +/** + * Returns the sum of all elements in the collection. + */ +platformName("sumOfDouble") +public fun Sequence.sum(): Double { + val iterator = iterator() + var sum: Double = 0.0 + while (iterator.hasNext()) { + sum += iterator.next() + } + return sum +} + /** * Returns the sum of all elements in the collection. */ @@ -648,10 +634,10 @@ public fun Sequence.sum(): Float { /** * Returns the sum of all elements in the collection. */ -platformName("sumOfFloat") -public fun Array.sum(): Float { +platformName("sumOfInt") +public fun Sequence.sum(): Int { val iterator = iterator() - var sum: Float = 0.0f + var sum: Int = 0 while (iterator.hasNext()) { sum += iterator.next() } @@ -661,9 +647,23 @@ public fun Array.sum(): Float { /** * Returns the sum of all elements in the collection. */ -public fun FloatArray.sum(): Float { +platformName("sumOfLong") +public fun Sequence.sum(): Long { val iterator = iterator() - var sum: Float = 0.0f + var sum: Long = 0L + while (iterator.hasNext()) { + sum += iterator.next() + } + return sum +} + +/** + * Returns the sum of all elements in the collection. + */ +platformName("sumOfShort") +public fun Sequence.sum(): Int { + val iterator = iterator() + var sum: Int = 0 while (iterator.hasNext()) { sum += iterator.next() } diff --git a/libraries/tools/kotlin-stdlib-gen/src/generators/GenerateCollections.kt b/libraries/tools/kotlin-stdlib-gen/src/generators/GenerateCollections.kt index 85b7729fc19..644cdb8b7c2 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/generators/GenerateCollections.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/generators/GenerateCollections.kt @@ -20,26 +20,9 @@ fun generateCollectionsAPI(outDir: File) { sequences().writeTo(File(outDir, "_Sequences.kt")) { build() } specialJVM().writeTo(File(outDir, "_SpecialJVM.kt")) { build() } ranges().writeTo(File(outDir, "_Ranges.kt")) { build() } - - toPrimitiveArrays().writeTo(File(outDir, "_ArraysToPrimitiveArrays.kt")) { - val builder = StringBuilder() - for (family in buildFamilies) - build(builder, family, buildPrimitives.single()) - - builder.toString() - } - - numeric().writeTo(File(outDir, "_Numeric.kt")) { - val builder = StringBuilder() - for (numeric in numericPrimitives) - for (family in buildFamilies) - build(builder, family, numeric) - - builder.toString() - } - + toPrimitiveArrays().writeTo(File(outDir, "_ArraysToPrimitiveArrays.kt")) { build() } + numeric().writeTo(File(outDir, "_Numeric.kt")) { build() } comparables().writeTo(File(outDir, "_Comparables.kt")) { build() } - } fun generateCollectionsJsAPI(outDir: File) { diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Arrays.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Arrays.kt index 99592c3663d..6c159b4173a 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Arrays.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Arrays.kt @@ -64,7 +64,7 @@ fun toPrimitiveArrays(): List = val arrayType = primitive.name + "Array" f("to$arrayType()") { only(ArraysOfObjects, Collections) - only(primitive) + buildFamilies.forEach { family -> onlyPrimitives(family, primitive) } doc(ArraysOfObjects) { "Returns an array of ${primitive.name} containing all of the elements of this generic array." } doc(Collections) { "Returns an array of ${primitive.name} containing all of the elements of this collection." } returns(arrayType) diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Numeric.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Numeric.kt index 4fea19c46c0..c91958e6eb4 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Numeric.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Numeric.kt @@ -7,6 +7,7 @@ fun numeric(): List { templates add f("sum()") { exclude(Strings) + buildFamilies.forEach { family -> onlyPrimitives(family, numericPrimitives) } doc { "Returns the sum of all elements in the collection." } returns("SUM") platformName("sumOf") @@ -24,6 +25,7 @@ fun numeric(): List { templates add f("average()") { exclude(Strings) + buildFamilies.forEach { family -> onlyPrimitives(family, numericPrimitives) } doc { "Returns an average value of elements in the collection."} returns("Double") platformName("averageOf")