From a3a1c391cc7bf073938652c46ed2712e9ab5b7ff Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Thu, 27 Apr 2017 16:35:05 +0300 Subject: [PATCH] Generate 'chunked' and 'windowed' signatures and delegating implementations Add implementations of windowed. --- .../src/core/generated/_CollectionsJs.kt | 23 ++++ .../src/core/generated/_SequencesJs.kt | 20 ++++ .../src/core/generated/_StringsJs.kt | 40 +++++++ .../common/src/generated/_Collections.kt | 12 ++ .../stdlib/common/src/generated/_Sequences.kt | 12 ++ .../stdlib/common/src/generated/_Strings.kt | 24 ++++ .../stdlib/src/generated/_Collections.kt | 23 ++++ libraries/stdlib/src/generated/_Sequences.kt | 20 ++++ libraries/stdlib/src/generated/_Strings.kt | 40 +++++++ .../src/kotlin/collections/Collections.kt | 2 +- .../kotlin-stdlib-runtime-merged.txt | 16 +++ .../reference-public-api/kotlin-stdlib.txt | 16 +++ .../src/templates/Generators.kt | 104 ++++++++++++++++++ 13 files changed, 351 insertions(+), 1 deletion(-) diff --git a/js/js.libraries/src/core/generated/_CollectionsJs.kt b/js/js.libraries/src/core/generated/_CollectionsJs.kt index c062a0e4786..4b1689a9963 100644 --- a/js/js.libraries/src/core/generated/_CollectionsJs.kt +++ b/js/js.libraries/src/core/generated/_CollectionsJs.kt @@ -1788,6 +1788,16 @@ public fun List.requireNoNulls(): List { return this as List } +@SinceKotlin("1.2") +public fun Iterable.chunked(size: Int): List> { + return chunked(size) { it.toList() } +} + +@SinceKotlin("1.2") +public fun Iterable.chunked(size: Int, transform: (List) -> R): List { + return windowed(size, size, transform) +} + /** * Returns a list containing all elements of the original collection without the first occurrence of the given [element]. */ @@ -1976,6 +1986,19 @@ public inline fun Collection.plusElement(element: T): List { return plus(element) } +@SinceKotlin("1.2") +public fun Iterable.windowed(size: Int, step: Int): List> { + return windowed(size, step) { it.toList() } +} + +@SinceKotlin("1.2") +public fun Iterable.windowed(size: Int, step: Int, transform: (List) -> R): List { + if (this is List) { + return windowIndices(this.size, size, step, dropTrailing = false).asIterable().map { transform(subList(it.start, it.endInclusive + 1)) } + } + return windowForwardOnlySequenceImpl(iterator(), size, step, dropTrailing = false).asIterable().map(transform) +} + /** * Returns a list of pairs built from elements of both collections with same indexes. List has length of shortest collection. */ diff --git a/js/js.libraries/src/core/generated/_SequencesJs.kt b/js/js.libraries/src/core/generated/_SequencesJs.kt index 9f243463da4..745070fd35c 100644 --- a/js/js.libraries/src/core/generated/_SequencesJs.kt +++ b/js/js.libraries/src/core/generated/_SequencesJs.kt @@ -1309,6 +1309,16 @@ public fun Sequence.requireNoNulls(): Sequence { return map { it ?: throw IllegalArgumentException("null element found in $this.") } } +@SinceKotlin("1.2") +public fun Sequence.chunked(size: Int): Sequence> { + return chunked(size) { it.toList() } +} + +@SinceKotlin("1.2") +public fun Sequence.chunked(size: Int, transform: (List) -> R): Sequence { + return windowed(size, size, transform) +} + /** * Returns a sequence containing all elements of the original sequence without the first occurrence of the given [element]. * @@ -1485,6 +1495,16 @@ public inline fun Sequence.plusElement(element: T): Sequence { return plus(element) } +@SinceKotlin("1.2") +public fun Sequence.windowed(size: Int, step: Int): Sequence> { + return windowed(size, step) { it.toList() } +} + +@SinceKotlin("1.2") +public fun Sequence.windowed(size: Int, step: Int, transform: (List) -> R): Sequence { + return Sequence { windowForwardOnlySequenceImpl(iterator(), size, step, dropTrailing = false).iterator() }.map(transform) +} + /** * Returns a sequence of pairs built from elements of both sequences with same indexes. * Resulting sequence has length of shortest input sequence. diff --git a/js/js.libraries/src/core/generated/_StringsJs.kt b/js/js.libraries/src/core/generated/_StringsJs.kt index aa80052ceca..111d7f54be8 100644 --- a/js/js.libraries/src/core/generated/_StringsJs.kt +++ b/js/js.libraries/src/core/generated/_StringsJs.kt @@ -1102,6 +1102,26 @@ public inline fun CharSequence.sumByDouble(selector: (Char) -> Double): Double { return sum } +@SinceKotlin("1.2") +public fun CharSequence.chunked(size: Int): List { + return chunked(size) { it.toString() } +} + +@SinceKotlin("1.2") +public fun CharSequence.chunked(size: Int, transform: (CharSequence) -> R): List { + return windowed(size, size, transform) +} + +@SinceKotlin("1.2") +public fun CharSequence.chunkedSequence(size: Int): Sequence { + return chunkedSequence(size) { it.toString() } +} + +@SinceKotlin("1.2") +public fun CharSequence.chunkedSequence(size: Int, transform: (CharSequence) -> R): Sequence { + return windowedSequence(size, size, transform) +} + @SinceKotlin("1.2") public fun CharSequence.pairwise(): List> { return pairwise { a, b -> a to b } @@ -1154,6 +1174,26 @@ public inline fun String.partition(predicate: (Char) -> Boolean): Pair { + return windowed(size, step) { it.toString() } +} + +@SinceKotlin("1.2") +public fun CharSequence.windowed(size: Int, step: Int, transform: (CharSequence) -> R): List { + return windowIndices(this.length, size, step, dropTrailing = false).asIterable().map { transform(subSequence(it)) } +} + +@SinceKotlin("1.2") +public fun CharSequence.windowedSequence(size: Int, step: Int): Sequence { + return windowedSequence(size, step) { it.toString() } +} + +@SinceKotlin("1.2") +public fun CharSequence.windowedSequence(size: Int, step: Int, transform: (CharSequence) -> R): Sequence { + return windowIndices(this.length, size, step, dropTrailing = false).map { transform(subSequence(it)) } +} + /** * Returns a list of pairs built from characters of both char sequences with same indexes. List has length of shortest char sequence. */ diff --git a/libraries/stdlib/common/src/generated/_Collections.kt b/libraries/stdlib/common/src/generated/_Collections.kt index e4b0fb22e99..92a5cad43a6 100644 --- a/libraries/stdlib/common/src/generated/_Collections.kt +++ b/libraries/stdlib/common/src/generated/_Collections.kt @@ -898,6 +898,12 @@ public expect fun Iterable.requireNoNulls(): Iterable */ public expect fun List.requireNoNulls(): List +@SinceKotlin("1.2") +public expect fun Iterable.chunked(size: Int): List> + +@SinceKotlin("1.2") +public expect fun Iterable.chunked(size: Int, transform: (List) -> R): List + /** * Returns a list containing all elements of the original collection without the first occurrence of the given [element]. */ @@ -989,6 +995,12 @@ public expect inline fun Iterable.plusElement(element: T): List @kotlin.internal.InlineOnly public expect inline fun Collection.plusElement(element: T): List +@SinceKotlin("1.2") +public expect fun Iterable.windowed(size: Int, step: Int): List> + +@SinceKotlin("1.2") +public expect fun Iterable.windowed(size: Int, step: Int, transform: (List) -> R): List + /** * Returns a list of pairs built from elements of both collections with same indexes. List has length of shortest collection. */ diff --git a/libraries/stdlib/common/src/generated/_Sequences.kt b/libraries/stdlib/common/src/generated/_Sequences.kt index 7d13d1cdf11..dab639d5bfa 100644 --- a/libraries/stdlib/common/src/generated/_Sequences.kt +++ b/libraries/stdlib/common/src/generated/_Sequences.kt @@ -803,6 +803,12 @@ public expect inline fun Sequence.sumByDouble(selector: (T) -> Double): D */ public expect fun Sequence.requireNoNulls(): Sequence +@SinceKotlin("1.2") +public expect fun Sequence.chunked(size: Int): Sequence> + +@SinceKotlin("1.2") +public expect fun Sequence.chunked(size: Int, transform: (List) -> R): Sequence + /** * Returns a sequence containing all elements of the original sequence without the first occurrence of the given [element]. * @@ -908,6 +914,12 @@ public expect operator fun Sequence.plus(elements: Sequence): Sequence @kotlin.internal.InlineOnly public expect inline fun Sequence.plusElement(element: T): Sequence +@SinceKotlin("1.2") +public expect fun Sequence.windowed(size: Int, step: Int): Sequence> + +@SinceKotlin("1.2") +public expect fun Sequence.windowed(size: Int, step: Int, transform: (List) -> R): Sequence + /** * Returns a sequence of pairs built from elements of both sequences with same indexes. * Resulting sequence has length of shortest input sequence. diff --git a/libraries/stdlib/common/src/generated/_Strings.kt b/libraries/stdlib/common/src/generated/_Strings.kt index 4226de31eda..1fa5fd44998 100644 --- a/libraries/stdlib/common/src/generated/_Strings.kt +++ b/libraries/stdlib/common/src/generated/_Strings.kt @@ -638,6 +638,18 @@ public expect inline fun CharSequence.sumBy(selector: (Char) -> Int): Int */ public expect inline fun CharSequence.sumByDouble(selector: (Char) -> Double): Double +@SinceKotlin("1.2") +public expect fun CharSequence.chunked(size: Int): List + +@SinceKotlin("1.2") +public expect fun CharSequence.chunked(size: Int, transform: (CharSequence) -> R): List + +@SinceKotlin("1.2") +public expect fun CharSequence.chunkedSequence(size: Int): Sequence + +@SinceKotlin("1.2") +public expect fun CharSequence.chunkedSequence(size: Int, transform: (CharSequence) -> R): Sequence + @SinceKotlin("1.2") public expect fun CharSequence.pairwise(): List> @@ -658,6 +670,18 @@ public expect inline fun CharSequence.partition(predicate: (Char) -> Boolean): P */ public expect inline fun String.partition(predicate: (Char) -> Boolean): Pair +@SinceKotlin("1.2") +public expect fun CharSequence.windowed(size: Int, step: Int): List + +@SinceKotlin("1.2") +public expect fun CharSequence.windowed(size: Int, step: Int, transform: (CharSequence) -> R): List + +@SinceKotlin("1.2") +public expect fun CharSequence.windowedSequence(size: Int, step: Int): Sequence + +@SinceKotlin("1.2") +public expect fun CharSequence.windowedSequence(size: Int, step: Int, transform: (CharSequence) -> R): Sequence + /** * Returns a list of pairs built from characters of both char sequences with same indexes. List has length of shortest char sequence. */ diff --git a/libraries/stdlib/src/generated/_Collections.kt b/libraries/stdlib/src/generated/_Collections.kt index 48f00224014..047ab5d819c 100644 --- a/libraries/stdlib/src/generated/_Collections.kt +++ b/libraries/stdlib/src/generated/_Collections.kt @@ -1798,6 +1798,16 @@ public fun List.requireNoNulls(): List { return this as List } +@SinceKotlin("1.2") +public fun Iterable.chunked(size: Int): List> { + return chunked(size) { it.toList() } +} + +@SinceKotlin("1.2") +public fun Iterable.chunked(size: Int, transform: (List) -> R): List { + return windowed(size, size, transform) +} + /** * Returns a list containing all elements of the original collection without the first occurrence of the given [element]. */ @@ -1986,6 +1996,19 @@ public inline fun Collection.plusElement(element: T): List { return plus(element) } +@SinceKotlin("1.2") +public fun Iterable.windowed(size: Int, step: Int): List> { + return windowed(size, step) { it.toList() } +} + +@SinceKotlin("1.2") +public fun Iterable.windowed(size: Int, step: Int, transform: (List) -> R): List { + if (this is List) { + return windowIndices(this.size, size, step, dropTrailing = false).asIterable().map { transform(subList(it.start, it.endInclusive + 1)) } + } + return windowForwardOnlySequenceImpl(iterator(), size, step, dropTrailing = false).asIterable().map(transform) +} + /** * Returns a list of pairs built from elements of both collections with same indexes. List has length of shortest collection. */ diff --git a/libraries/stdlib/src/generated/_Sequences.kt b/libraries/stdlib/src/generated/_Sequences.kt index fb803cc88ef..ebb97024bfe 100644 --- a/libraries/stdlib/src/generated/_Sequences.kt +++ b/libraries/stdlib/src/generated/_Sequences.kt @@ -1331,6 +1331,16 @@ public fun Sequence.requireNoNulls(): Sequence { return map { it ?: throw IllegalArgumentException("null element found in $this.") } } +@SinceKotlin("1.2") +public fun Sequence.chunked(size: Int): Sequence> { + return chunked(size) { it.toList() } +} + +@SinceKotlin("1.2") +public fun Sequence.chunked(size: Int, transform: (List) -> R): Sequence { + return windowed(size, size, transform) +} + /** * Returns a sequence containing all elements of the original sequence without the first occurrence of the given [element]. * @@ -1507,6 +1517,16 @@ public inline fun Sequence.plusElement(element: T): Sequence { return plus(element) } +@SinceKotlin("1.2") +public fun Sequence.windowed(size: Int, step: Int): Sequence> { + return windowed(size, step) { it.toList() } +} + +@SinceKotlin("1.2") +public fun Sequence.windowed(size: Int, step: Int, transform: (List) -> R): Sequence { + return Sequence { windowForwardOnlySequenceImpl(iterator(), size, step, dropTrailing = false).iterator() }.map(transform) +} + /** * Returns a sequence of pairs built from elements of both sequences with same indexes. * Resulting sequence has length of shortest input sequence. diff --git a/libraries/stdlib/src/generated/_Strings.kt b/libraries/stdlib/src/generated/_Strings.kt index f28676a9bf4..c970c1582af 100644 --- a/libraries/stdlib/src/generated/_Strings.kt +++ b/libraries/stdlib/src/generated/_Strings.kt @@ -1110,6 +1110,26 @@ public inline fun CharSequence.sumByDouble(selector: (Char) -> Double): Double { return sum } +@SinceKotlin("1.2") +public fun CharSequence.chunked(size: Int): List { + return chunked(size) { it.toString() } +} + +@SinceKotlin("1.2") +public fun CharSequence.chunked(size: Int, transform: (CharSequence) -> R): List { + return windowed(size, size, transform) +} + +@SinceKotlin("1.2") +public fun CharSequence.chunkedSequence(size: Int): Sequence { + return chunkedSequence(size) { it.toString() } +} + +@SinceKotlin("1.2") +public fun CharSequence.chunkedSequence(size: Int, transform: (CharSequence) -> R): Sequence { + return windowedSequence(size, size, transform) +} + @SinceKotlin("1.2") public fun CharSequence.pairwise(): List> { return pairwise { a, b -> a to b } @@ -1162,6 +1182,26 @@ public inline fun String.partition(predicate: (Char) -> Boolean): Pair { + return windowed(size, step) { it.toString() } +} + +@SinceKotlin("1.2") +public fun CharSequence.windowed(size: Int, step: Int, transform: (CharSequence) -> R): List { + return windowIndices(this.length, size, step, dropTrailing = false).asIterable().map { transform(subSequence(it)) } +} + +@SinceKotlin("1.2") +public fun CharSequence.windowedSequence(size: Int, step: Int): Sequence { + return windowedSequence(size, step) { it.toString() } +} + +@SinceKotlin("1.2") +public fun CharSequence.windowedSequence(size: Int, step: Int, transform: (CharSequence) -> R): Sequence { + return windowIndices(this.length, size, step, dropTrailing = false).map { transform(subSequence(it)) } +} + /** * Returns a list of pairs built from characters of both char sequences with same indexes. List has length of shortest char sequence. */ diff --git a/libraries/stdlib/src/kotlin/collections/Collections.kt b/libraries/stdlib/src/kotlin/collections/Collections.kt index e6daf7b4e46..470ea7499d2 100644 --- a/libraries/stdlib/src/kotlin/collections/Collections.kt +++ b/libraries/stdlib/src/kotlin/collections/Collections.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. + * Copyright 2010-2017 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. diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt index a537eb5a64d..d5d3d04c39a 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt @@ -1565,6 +1565,8 @@ public final class kotlin/collections/CollectionsKt { public static synthetic fun binarySearch$default (Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;IIILjava/lang/Object;)I public static final fun binarySearchBy (Ljava/util/List;Ljava/lang/Comparable;IILkotlin/jvm/functions/Function1;)I public static synthetic fun binarySearchBy$default (Ljava/util/List;Ljava/lang/Comparable;IILkotlin/jvm/functions/Function1;ILjava/lang/Object;)I + public static final fun chunked (Ljava/lang/Iterable;I)Ljava/util/List; + public static final fun chunked (Ljava/lang/Iterable;ILkotlin/jvm/functions/Function1;)Ljava/util/List; public static final fun collectionSizeOrDefault (Ljava/lang/Iterable;I)I public static final fun collectionSizeOrNull (Ljava/lang/Iterable;)Ljava/lang/Integer; public static final fun contains (Ljava/lang/Iterable;Ljava/lang/Object;)Z @@ -1745,6 +1747,8 @@ public final class kotlin/collections/CollectionsKt { public static final fun toSortedSet (Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/SortedSet; public static final fun union (Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set; public static final fun unzip (Ljava/lang/Iterable;)Lkotlin/Pair; + public static final fun windowed (Ljava/lang/Iterable;II)Ljava/util/List; + public static final fun windowed (Ljava/lang/Iterable;IILkotlin/jvm/functions/Function1;)Ljava/util/List; public static final fun withIndex (Ljava/lang/Iterable;)Ljava/lang/Iterable; public static final fun withIndex (Ljava/util/Iterator;)Ljava/util/Iterator; public static final fun zip (Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/List; @@ -3474,6 +3478,8 @@ public final class kotlin/sequences/SequencesKt { public static final fun averageOfInt (Lkotlin/sequences/Sequence;)D public static final fun averageOfLong (Lkotlin/sequences/Sequence;)D public static final fun averageOfShort (Lkotlin/sequences/Sequence;)D + public static final fun chunked (Lkotlin/sequences/Sequence;I)Lkotlin/sequences/Sequence; + public static final fun chunked (Lkotlin/sequences/Sequence;ILkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; public static final fun constrainOnce (Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; public static final fun contains (Lkotlin/sequences/Sequence;Ljava/lang/Object;)Z public static final fun count (Lkotlin/sequences/Sequence;)I @@ -3592,6 +3598,8 @@ public final class kotlin/sequences/SequencesKt { public static final fun toSortedSet (Lkotlin/sequences/Sequence;)Ljava/util/SortedSet; public static final fun toSortedSet (Lkotlin/sequences/Sequence;Ljava/util/Comparator;)Ljava/util/SortedSet; public static final fun unzip (Lkotlin/sequences/Sequence;)Lkotlin/Pair; + public static final fun windowed (Lkotlin/sequences/Sequence;II)Lkotlin/sequences/Sequence; + public static final fun windowed (Lkotlin/sequences/Sequence;IILkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; public static final fun withIndex (Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; public static final fun zip (Lkotlin/sequences/Sequence;Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; public static final fun zip (Lkotlin/sequences/Sequence;Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence; @@ -3800,6 +3808,10 @@ public final class kotlin/text/StringsKt { public static final fun associateByTo (Ljava/lang/CharSequence;Ljava/util/Map;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; public static final fun associateTo (Ljava/lang/CharSequence;Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; public static final fun capitalize (Ljava/lang/String;)Ljava/lang/String; + public static final fun chunked (Ljava/lang/CharSequence;I)Ljava/util/List; + public static final fun chunked (Ljava/lang/CharSequence;ILkotlin/jvm/functions/Function1;)Ljava/util/List; + public static final fun chunkedSequence (Ljava/lang/CharSequence;I)Lkotlin/sequences/Sequence; + public static final fun chunkedSequence (Ljava/lang/CharSequence;ILkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; public static final fun commonPrefixWith (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Ljava/lang/String; public static synthetic fun commonPrefixWith$default (Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Ljava/lang/String; public static final fun commonSuffixWith (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Ljava/lang/String; @@ -4060,6 +4072,10 @@ public final class kotlin/text/StringsKt { public static final fun trimStart (Ljava/lang/CharSequence;[C)Ljava/lang/CharSequence; public static final fun trimStart (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Ljava/lang/String; public static final fun trimStart (Ljava/lang/String;[C)Ljava/lang/String; + public static final fun windowed (Ljava/lang/CharSequence;II)Ljava/util/List; + public static final fun windowed (Ljava/lang/CharSequence;IILkotlin/jvm/functions/Function1;)Ljava/util/List; + public static final fun windowedSequence (Ljava/lang/CharSequence;II)Lkotlin/sequences/Sequence; + public static final fun windowedSequence (Ljava/lang/CharSequence;IILkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; public static final fun withIndex (Ljava/lang/CharSequence;)Ljava/lang/Iterable; public static final fun zip (Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/util/List; public static final fun zip (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)Ljava/util/List; diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib.txt index 96821f6d189..c3f3b7291f8 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib.txt @@ -1424,6 +1424,8 @@ public final class kotlin/collections/CollectionsKt { public static synthetic fun binarySearch$default (Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;IIILjava/lang/Object;)I public static final fun binarySearchBy (Ljava/util/List;Ljava/lang/Comparable;IILkotlin/jvm/functions/Function1;)I public static synthetic fun binarySearchBy$default (Ljava/util/List;Ljava/lang/Comparable;IILkotlin/jvm/functions/Function1;ILjava/lang/Object;)I + public static final fun chunked (Ljava/lang/Iterable;I)Ljava/util/List; + public static final fun chunked (Ljava/lang/Iterable;ILkotlin/jvm/functions/Function1;)Ljava/util/List; public static final fun collectionSizeOrDefault (Ljava/lang/Iterable;I)I public static final fun collectionSizeOrNull (Ljava/lang/Iterable;)Ljava/lang/Integer; public static final fun contains (Ljava/lang/Iterable;Ljava/lang/Object;)Z @@ -1604,6 +1606,8 @@ public final class kotlin/collections/CollectionsKt { public static final fun toSortedSet (Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/SortedSet; public static final fun union (Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set; public static final fun unzip (Ljava/lang/Iterable;)Lkotlin/Pair; + public static final fun windowed (Ljava/lang/Iterable;II)Ljava/util/List; + public static final fun windowed (Ljava/lang/Iterable;IILkotlin/jvm/functions/Function1;)Ljava/util/List; public static final fun withIndex (Ljava/lang/Iterable;)Ljava/lang/Iterable; public static final fun withIndex (Ljava/util/Iterator;)Ljava/util/Iterator; public static final fun zip (Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/List; @@ -2169,6 +2173,8 @@ public final class kotlin/sequences/SequencesKt { public static final fun averageOfInt (Lkotlin/sequences/Sequence;)D public static final fun averageOfLong (Lkotlin/sequences/Sequence;)D public static final fun averageOfShort (Lkotlin/sequences/Sequence;)D + public static final fun chunked (Lkotlin/sequences/Sequence;I)Lkotlin/sequences/Sequence; + public static final fun chunked (Lkotlin/sequences/Sequence;ILkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; public static final fun constrainOnce (Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; public static final fun contains (Lkotlin/sequences/Sequence;Ljava/lang/Object;)Z public static final fun count (Lkotlin/sequences/Sequence;)I @@ -2287,6 +2293,8 @@ public final class kotlin/sequences/SequencesKt { public static final fun toSortedSet (Lkotlin/sequences/Sequence;)Ljava/util/SortedSet; public static final fun toSortedSet (Lkotlin/sequences/Sequence;Ljava/util/Comparator;)Ljava/util/SortedSet; public static final fun unzip (Lkotlin/sequences/Sequence;)Lkotlin/Pair; + public static final fun windowed (Lkotlin/sequences/Sequence;II)Lkotlin/sequences/Sequence; + public static final fun windowed (Lkotlin/sequences/Sequence;IILkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; public static final fun withIndex (Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; public static final fun zip (Lkotlin/sequences/Sequence;Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; public static final fun zip (Lkotlin/sequences/Sequence;Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence; @@ -2495,6 +2503,10 @@ public final class kotlin/text/StringsKt { public static final fun associateByTo (Ljava/lang/CharSequence;Ljava/util/Map;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; public static final fun associateTo (Ljava/lang/CharSequence;Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Ljava/util/Map; public static final fun capitalize (Ljava/lang/String;)Ljava/lang/String; + public static final fun chunked (Ljava/lang/CharSequence;I)Ljava/util/List; + public static final fun chunked (Ljava/lang/CharSequence;ILkotlin/jvm/functions/Function1;)Ljava/util/List; + public static final fun chunkedSequence (Ljava/lang/CharSequence;I)Lkotlin/sequences/Sequence; + public static final fun chunkedSequence (Ljava/lang/CharSequence;ILkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; public static final fun commonPrefixWith (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Ljava/lang/String; public static synthetic fun commonPrefixWith$default (Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Ljava/lang/String; public static final fun commonSuffixWith (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Ljava/lang/String; @@ -2755,6 +2767,10 @@ public final class kotlin/text/StringsKt { public static final fun trimStart (Ljava/lang/CharSequence;[C)Ljava/lang/CharSequence; public static final fun trimStart (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Ljava/lang/String; public static final fun trimStart (Ljava/lang/String;[C)Ljava/lang/String; + public static final fun windowed (Ljava/lang/CharSequence;II)Ljava/util/List; + public static final fun windowed (Ljava/lang/CharSequence;IILkotlin/jvm/functions/Function1;)Ljava/util/List; + public static final fun windowedSequence (Ljava/lang/CharSequence;II)Lkotlin/sequences/Sequence; + public static final fun windowedSequence (Ljava/lang/CharSequence;IILkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; public static final fun withIndex (Ljava/lang/CharSequence;)Ljava/lang/Iterable; public static final fun zip (Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/util/List; public static final fun zip (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function2;)Ljava/util/List; diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Generators.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Generators.kt index ca8756037b0..70034483698 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Generators.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Generators.kt @@ -559,6 +559,110 @@ fun generators(): List { } } + templates add f("windowed(size: Int, step: Int, transform: (List) -> R)") { + since("1.2") + only(Iterables, Sequences, CharSequences) + typeParam("R") + + returns("List") + + body { + """ + if (this is List) { + return windowIndices(this.size, size, step, dropTrailing = false).asIterable().map { transform(subList(it.start, it.endInclusive + 1)) } + } + return windowForwardOnlySequenceImpl(iterator(), size, step, dropTrailing = false).asIterable().map(transform) + """ + } + + customSignature(CharSequences) { "windowed(size: Int, step: Int, transform: (CharSequence) -> R)" } + body(CharSequences) { + """ + return windowIndices(this.length, size, step, dropTrailing = false).asIterable().map { transform(subSequence(it)) } + """ + } + + returns(Sequences) { "Sequence" } + body(Sequences) { + """ + return Sequence { windowForwardOnlySequenceImpl(iterator(), size, step, dropTrailing = false).iterator() }.map(transform) + """ + } + } + + templates add f("windowed(size: Int, step: Int)") { + since("1.2") + only(Iterables, Sequences, CharSequences) + returns(Iterables) { "List>" } + returns(Sequences) { "Sequence>" } + returns(CharSequences) { "List" } + + body { "return windowed(size, step) { it.toList() }" } + body(CharSequences) { "return windowed(size, step) { it.toString() }" } + } + + templates add f("windowedSequence(size: Int, step: Int, transform: (CharSequence) -> R)") { + since("1.2") + only(CharSequences) + typeParam("R") + returns { "Sequence "} + + body(CharSequences) { + """ + return windowIndices(this.length, size, step, dropTrailing = false).map { transform(subSequence(it)) } + """ + } + } + + templates add f("windowedSequence(size: Int, step: Int)") { + since("1.2") + only(CharSequences) + returns { "Sequence "} + + body(CharSequences) { "return windowedSequence(size, step) { it.toString() }" } + } + + templates add f("chunked(size: Int, transform: (List) -> R)") { + since("1.2") + only(Iterables, Sequences, CharSequences) + typeParam("R") + + returns("List") + + customSignature(CharSequences) { "chunked(size: Int, transform: (CharSequence) -> R)" } + + returns(Sequences) { "Sequence" } + body { "return windowed(size, size, transform)" } + } + + templates add f("chunked(size: Int)") { + since("1.2") + only(Iterables, Sequences, CharSequences) + returns(Iterables) { "List>" } + returns(Sequences) { "Sequence>" } + returns(CharSequences) { "List" } + + body { "return chunked(size) { it.toList() }" } + body(CharSequences) { "return chunked(size) { it.toString() }" } + } + + templates add f("chunkedSequence(size: Int, transform: (CharSequence) -> R)") { + since("1.2") + only(CharSequences) + typeParam("R") + returns { "Sequence "} + + body { "return windowedSequence(size, size, transform)" } + } + + templates add f("chunkedSequence(size: Int)") { + since("1.2") + only(CharSequences) + returns { "Sequence "} + + body(CharSequences) { "return chunkedSequence(size) { it.toString() }" } + } + templates add f("pairwise(transform: (a: T, b: T) -> R)") { since("1.2") only(Iterables, Sequences, CharSequences)