Specialize Progression first/last/OrNull functions #KT-42178
This commit is contained in:
committed by
Space
parent
cca2680c7f
commit
42c9a27b8a
@@ -327,6 +327,66 @@ public infix fun kotlin.ULong.downTo(to: kotlin.ULong): kotlin.ranges.ULongProgr
|
|||||||
@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalUnsignedTypes::class})
|
@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalUnsignedTypes::class})
|
||||||
public infix fun kotlin.UShort.downTo(to: kotlin.UShort): kotlin.ranges.UIntProgression
|
public infix fun kotlin.UShort.downTo(to: kotlin.UShort): kotlin.ranges.UIntProgression
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.CharProgression.first(): kotlin.Char
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.IntProgression.first(): kotlin.Int
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.LongProgression.first(): kotlin.Long
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.UIntProgression.first(): kotlin.UInt
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.ULongProgression.first(): kotlin.ULong
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.CharProgression.firstOrNull(): kotlin.Char?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.IntProgression.firstOrNull(): kotlin.Int?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.LongProgression.firstOrNull(): kotlin.Long?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.UIntProgression.firstOrNull(): kotlin.UInt?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.ULongProgression.firstOrNull(): kotlin.ULong?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.CharProgression.last(): kotlin.Char
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.IntProgression.last(): kotlin.Int
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.LongProgression.last(): kotlin.Long
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.UIntProgression.last(): kotlin.UInt
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.ULongProgression.last(): kotlin.ULong
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.CharProgression.lastOrNull(): kotlin.Char?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.IntProgression.lastOrNull(): kotlin.Int?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.LongProgression.lastOrNull(): kotlin.Long?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.UIntProgression.lastOrNull(): kotlin.UInt?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.ULongProgression.lastOrNull(): kotlin.ULong?
|
||||||
|
|
||||||
@kotlin.SinceKotlin(version = "1.3")
|
@kotlin.SinceKotlin(version = "1.3")
|
||||||
@kotlin.internal.InlineOnly
|
@kotlin.internal.InlineOnly
|
||||||
public inline fun kotlin.ranges.CharRange.random(): kotlin.Char
|
public inline fun kotlin.ranges.CharRange.random(): kotlin.Char
|
||||||
|
|||||||
@@ -327,6 +327,66 @@ public infix fun kotlin.ULong.downTo(to: kotlin.ULong): kotlin.ranges.ULongProgr
|
|||||||
@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalUnsignedTypes::class})
|
@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalUnsignedTypes::class})
|
||||||
public infix fun kotlin.UShort.downTo(to: kotlin.UShort): kotlin.ranges.UIntProgression
|
public infix fun kotlin.UShort.downTo(to: kotlin.UShort): kotlin.ranges.UIntProgression
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.CharProgression.first(): kotlin.Char
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.IntProgression.first(): kotlin.Int
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.LongProgression.first(): kotlin.Long
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.UIntProgression.first(): kotlin.UInt
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.ULongProgression.first(): kotlin.ULong
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.CharProgression.firstOrNull(): kotlin.Char?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.IntProgression.firstOrNull(): kotlin.Int?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.LongProgression.firstOrNull(): kotlin.Long?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.UIntProgression.firstOrNull(): kotlin.UInt?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.ULongProgression.firstOrNull(): kotlin.ULong?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.CharProgression.last(): kotlin.Char
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.IntProgression.last(): kotlin.Int
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.LongProgression.last(): kotlin.Long
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.UIntProgression.last(): kotlin.UInt
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.ULongProgression.last(): kotlin.ULong
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.CharProgression.lastOrNull(): kotlin.Char?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.IntProgression.lastOrNull(): kotlin.Int?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.LongProgression.lastOrNull(): kotlin.Long?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.UIntProgression.lastOrNull(): kotlin.UInt?
|
||||||
|
|
||||||
|
@kotlin.SinceKotlin(version = "1.7")
|
||||||
|
public fun kotlin.ranges.ULongProgression.lastOrNull(): kotlin.ULong?
|
||||||
|
|
||||||
@kotlin.SinceKotlin(version = "1.3")
|
@kotlin.SinceKotlin(version = "1.3")
|
||||||
@kotlin.internal.InlineOnly
|
@kotlin.internal.InlineOnly
|
||||||
public inline fun kotlin.ranges.CharRange.random(): kotlin.Char
|
public inline fun kotlin.ranges.CharRange.random(): kotlin.Char
|
||||||
|
|||||||
@@ -1005,8 +1005,9 @@ public inline fun CharArray.findLast(predicate: (Char) -> Boolean): Char? {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
public fun <T> Array<out T>.first(): T {
|
public fun <T> Array<out T>.first(): T {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
@@ -1015,8 +1016,9 @@ public fun <T> Array<out T>.first(): T {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
public fun ByteArray.first(): Byte {
|
public fun ByteArray.first(): Byte {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
@@ -1025,8 +1027,9 @@ public fun ByteArray.first(): Byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
public fun ShortArray.first(): Short {
|
public fun ShortArray.first(): Short {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
@@ -1035,8 +1038,9 @@ public fun ShortArray.first(): Short {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
public fun IntArray.first(): Int {
|
public fun IntArray.first(): Int {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
@@ -1045,8 +1049,9 @@ public fun IntArray.first(): Int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
public fun LongArray.first(): Long {
|
public fun LongArray.first(): Long {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
@@ -1055,8 +1060,9 @@ public fun LongArray.first(): Long {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
public fun FloatArray.first(): Float {
|
public fun FloatArray.first(): Float {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
@@ -1065,8 +1071,9 @@ public fun FloatArray.first(): Float {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
public fun DoubleArray.first(): Double {
|
public fun DoubleArray.first(): Double {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
@@ -1075,8 +1082,9 @@ public fun DoubleArray.first(): Double {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
public fun BooleanArray.first(): Boolean {
|
public fun BooleanArray.first(): Boolean {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
@@ -1085,8 +1093,9 @@ public fun BooleanArray.first(): Boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
public fun CharArray.first(): Char {
|
public fun CharArray.first(): Char {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
|
|||||||
@@ -188,8 +188,9 @@ public inline fun <T> List<T>.findLast(predicate: (T) -> Boolean): T? {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the collection is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the collection is empty.
|
||||||
*/
|
*/
|
||||||
public fun <T> Iterable<T>.first(): T {
|
public fun <T> Iterable<T>.first(): T {
|
||||||
when (this) {
|
when (this) {
|
||||||
@@ -204,8 +205,9 @@ public fun <T> Iterable<T>.first(): T {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the list is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the list is empty.
|
||||||
*/
|
*/
|
||||||
public fun <T> List<T>.first(): T {
|
public fun <T> List<T>.first(): T {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
|
|||||||
@@ -15,6 +15,138 @@ package kotlin.ranges
|
|||||||
|
|
||||||
import kotlin.random.*
|
import kotlin.random.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the progression is empty.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun IntProgression.first(): Int {
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression $this is empty.")
|
||||||
|
return this.first
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the progression is empty.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun LongProgression.first(): Long {
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression $this is empty.")
|
||||||
|
return this.first
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the progression is empty.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun CharProgression.first(): Char {
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression $this is empty.")
|
||||||
|
return this.first
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element, or `null` if the progression is empty.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun IntProgression.firstOrNull(): Int? {
|
||||||
|
return if (isEmpty()) null else this.first
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element, or `null` if the progression is empty.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun LongProgression.firstOrNull(): Long? {
|
||||||
|
return if (isEmpty()) null else this.first
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element, or `null` if the progression is empty.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun CharProgression.firstOrNull(): Char? {
|
||||||
|
return if (isEmpty()) null else this.first
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the progression is empty.
|
||||||
|
*
|
||||||
|
* @sample samples.collections.Collections.Elements.last
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun IntProgression.last(): Int {
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression $this is empty.")
|
||||||
|
return this.last
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the progression is empty.
|
||||||
|
*
|
||||||
|
* @sample samples.collections.Collections.Elements.last
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun LongProgression.last(): Long {
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression $this is empty.")
|
||||||
|
return this.last
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the progression is empty.
|
||||||
|
*
|
||||||
|
* @sample samples.collections.Collections.Elements.last
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun CharProgression.last(): Char {
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression $this is empty.")
|
||||||
|
return this.last
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element, or `null` if the progression is empty.
|
||||||
|
*
|
||||||
|
* @sample samples.collections.Collections.Elements.last
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun IntProgression.lastOrNull(): Int? {
|
||||||
|
return if (isEmpty()) null else this.last
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element, or `null` if the progression is empty.
|
||||||
|
*
|
||||||
|
* @sample samples.collections.Collections.Elements.last
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun LongProgression.lastOrNull(): Long? {
|
||||||
|
return if (isEmpty()) null else this.last
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element, or `null` if the progression is empty.
|
||||||
|
*
|
||||||
|
* @sample samples.collections.Collections.Elements.last
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun CharProgression.lastOrNull(): Char? {
|
||||||
|
return if (isEmpty()) null else this.last
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a random element from this range.
|
* Returns a random element from this range.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -100,10 +100,11 @@ public inline fun <T> Sequence<T>.findLast(predicate: (T) -> Boolean): T? {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the sequence is empty.
|
|
||||||
*
|
*
|
||||||
* The operation is _terminal_.
|
* The operation is _terminal_.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the sequence is empty.
|
||||||
*/
|
*/
|
||||||
public fun <T> Sequence<T>.first(): T {
|
public fun <T> Sequence<T>.first(): T {
|
||||||
val iterator = iterator()
|
val iterator = iterator()
|
||||||
|
|||||||
@@ -63,8 +63,9 @@ public inline fun CharSequence.findLast(predicate: (Char) -> Boolean): Char? {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first character.
|
* Returns the first character.
|
||||||
* @throws [NoSuchElementException] if the char sequence is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the char sequence is empty.
|
||||||
*/
|
*/
|
||||||
public fun CharSequence.first(): Char {
|
public fun CharSequence.first(): Char {
|
||||||
if (isEmpty())
|
if (isEmpty())
|
||||||
|
|||||||
@@ -507,8 +507,9 @@ public inline fun UShortArray.findLast(predicate: (UShort) -> Boolean): UShort?
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
@SinceKotlin("1.3")
|
@SinceKotlin("1.3")
|
||||||
@ExperimentalUnsignedTypes
|
@ExperimentalUnsignedTypes
|
||||||
@@ -518,8 +519,9 @@ public inline fun UIntArray.first(): UInt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
@SinceKotlin("1.3")
|
@SinceKotlin("1.3")
|
||||||
@ExperimentalUnsignedTypes
|
@ExperimentalUnsignedTypes
|
||||||
@@ -529,8 +531,9 @@ public inline fun ULongArray.first(): ULong {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
@SinceKotlin("1.3")
|
@SinceKotlin("1.3")
|
||||||
@ExperimentalUnsignedTypes
|
@ExperimentalUnsignedTypes
|
||||||
@@ -540,8 +543,9 @@ public inline fun UByteArray.first(): UByte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns first element.
|
* Returns the first element.
|
||||||
* @throws [NoSuchElementException] if the array is empty.
|
*
|
||||||
|
* @throws NoSuchElementException if the array is empty.
|
||||||
*/
|
*/
|
||||||
@SinceKotlin("1.3")
|
@SinceKotlin("1.3")
|
||||||
@ExperimentalUnsignedTypes
|
@ExperimentalUnsignedTypes
|
||||||
|
|||||||
@@ -15,6 +15,94 @@ package kotlin.ranges
|
|||||||
|
|
||||||
import kotlin.random.*
|
import kotlin.random.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the progression is empty.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun UIntProgression.first(): UInt {
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression $this is empty.")
|
||||||
|
return this.first
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the progression is empty.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun ULongProgression.first(): ULong {
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression $this is empty.")
|
||||||
|
return this.first
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element, or `null` if the progression is empty.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun UIntProgression.firstOrNull(): UInt? {
|
||||||
|
return if (isEmpty()) null else this.first
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the first element, or `null` if the progression is empty.
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun ULongProgression.firstOrNull(): ULong? {
|
||||||
|
return if (isEmpty()) null else this.first
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the progression is empty.
|
||||||
|
*
|
||||||
|
* @sample samples.collections.Collections.Elements.last
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun UIntProgression.last(): UInt {
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression $this is empty.")
|
||||||
|
return this.last
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element.
|
||||||
|
*
|
||||||
|
* @throws NoSuchElementException if the progression is empty.
|
||||||
|
*
|
||||||
|
* @sample samples.collections.Collections.Elements.last
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun ULongProgression.last(): ULong {
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression $this is empty.")
|
||||||
|
return this.last
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element, or `null` if the progression is empty.
|
||||||
|
*
|
||||||
|
* @sample samples.collections.Collections.Elements.last
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun UIntProgression.lastOrNull(): UInt? {
|
||||||
|
return if (isEmpty()) null else this.last
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the last element, or `null` if the progression is empty.
|
||||||
|
*
|
||||||
|
* @sample samples.collections.Collections.Elements.last
|
||||||
|
*/
|
||||||
|
@SinceKotlin("1.7")
|
||||||
|
public fun ULongProgression.lastOrNull(): ULong? {
|
||||||
|
return if (isEmpty()) null else this.last
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a random element from this range.
|
* Returns a random element from this range.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -399,4 +399,32 @@ public class RangeTest {
|
|||||||
assertNull(LongRange.EMPTY.randomOrNull())
|
assertNull(LongRange.EMPTY.randomOrNull())
|
||||||
assertNull(CharRange.EMPTY.randomOrNull())
|
assertNull(CharRange.EMPTY.randomOrNull())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test fun firstInEmptyRange() {
|
||||||
|
assertFailsWith<NoSuchElementException> { IntRange.EMPTY.first() }
|
||||||
|
assertFailsWith<NoSuchElementException> { LongRange.EMPTY.first() }
|
||||||
|
assertFailsWith<NoSuchElementException> { CharRange.EMPTY.first() }
|
||||||
|
assertFailsWith<NoSuchElementException> { IntProgression.fromClosedRange(0, 3, -2).first() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun firstOrNullInEmptyRange() {
|
||||||
|
assertNull(IntRange.EMPTY.firstOrNull())
|
||||||
|
assertNull(LongRange.EMPTY.firstOrNull())
|
||||||
|
assertNull(CharRange.EMPTY.firstOrNull())
|
||||||
|
assertNull(IntProgression.fromClosedRange(0, 3, -2).firstOrNull())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun lastInEmptyRange() {
|
||||||
|
assertFailsWith<NoSuchElementException> { IntRange.EMPTY.last() }
|
||||||
|
assertFailsWith<NoSuchElementException> { LongRange.EMPTY.last() }
|
||||||
|
assertFailsWith<NoSuchElementException> { CharRange.EMPTY.last() }
|
||||||
|
assertFailsWith<NoSuchElementException> { IntProgression.fromClosedRange(0, 3, -2).last() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun lastOrNullInEmptyRange() {
|
||||||
|
assertNull(IntRange.EMPTY.lastOrNull())
|
||||||
|
assertNull(LongRange.EMPTY.lastOrNull())
|
||||||
|
assertNull(CharRange.EMPTY.lastOrNull())
|
||||||
|
assertNull(IntProgression.fromClosedRange(0, 3, -2).lastOrNull())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -241,4 +241,28 @@ public class URangeTest {
|
|||||||
assertFailsWith<NoSuchElementException> { UIntRange.EMPTY.random() }
|
assertFailsWith<NoSuchElementException> { UIntRange.EMPTY.random() }
|
||||||
assertFailsWith<NoSuchElementException> { ULongRange.EMPTY.random() }
|
assertFailsWith<NoSuchElementException> { ULongRange.EMPTY.random() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test fun firstInEmptyRange() {
|
||||||
|
assertFailsWith<NoSuchElementException> { UIntRange.EMPTY.first() }
|
||||||
|
assertFailsWith<NoSuchElementException> { ULongRange.EMPTY.first() }
|
||||||
|
assertFailsWith<NoSuchElementException> { UIntProgression.fromClosedRange(0u, 3u, -2).first() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun firstOrNullInEmptyRange() {
|
||||||
|
assertNull(UIntRange.EMPTY.firstOrNull())
|
||||||
|
assertNull(ULongRange.EMPTY.firstOrNull())
|
||||||
|
assertNull(UIntProgression.fromClosedRange(0u, 3u, -2).firstOrNull())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun lastInEmptyRange() {
|
||||||
|
assertFailsWith<NoSuchElementException> { UIntRange.EMPTY.last() }
|
||||||
|
assertFailsWith<NoSuchElementException> { ULongRange.EMPTY.last() }
|
||||||
|
assertFailsWith<NoSuchElementException> { UIntProgression.fromClosedRange(0u, 3u, -2).last() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun lastOrNullInEmptyRange() {
|
||||||
|
assertNull(UIntRange.EMPTY.lastOrNull())
|
||||||
|
assertNull(ULongRange.EMPTY.lastOrNull())
|
||||||
|
assertNull(UIntProgression.fromClosedRange(0u, 3u, -2).lastOrNull())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
@@ -4491,6 +4491,12 @@ public final class kotlin/ranges/RangesKt {
|
|||||||
public static final fun downTo (SI)Lkotlin/ranges/IntProgression;
|
public static final fun downTo (SI)Lkotlin/ranges/IntProgression;
|
||||||
public static final fun downTo (SJ)Lkotlin/ranges/LongProgression;
|
public static final fun downTo (SJ)Lkotlin/ranges/LongProgression;
|
||||||
public static final fun downTo (SS)Lkotlin/ranges/IntProgression;
|
public static final fun downTo (SS)Lkotlin/ranges/IntProgression;
|
||||||
|
public static final fun first (Lkotlin/ranges/CharProgression;)C
|
||||||
|
public static final fun first (Lkotlin/ranges/IntProgression;)I
|
||||||
|
public static final fun first (Lkotlin/ranges/LongProgression;)J
|
||||||
|
public static final fun firstOrNull (Lkotlin/ranges/CharProgression;)Ljava/lang/Character;
|
||||||
|
public static final fun firstOrNull (Lkotlin/ranges/IntProgression;)Ljava/lang/Integer;
|
||||||
|
public static final fun firstOrNull (Lkotlin/ranges/LongProgression;)Ljava/lang/Long;
|
||||||
public static final synthetic fun floatRangeContains (Lkotlin/ranges/ClosedRange;B)Z
|
public static final synthetic fun floatRangeContains (Lkotlin/ranges/ClosedRange;B)Z
|
||||||
public static final fun floatRangeContains (Lkotlin/ranges/ClosedRange;D)Z
|
public static final fun floatRangeContains (Lkotlin/ranges/ClosedRange;D)Z
|
||||||
public static final synthetic fun floatRangeContains (Lkotlin/ranges/ClosedRange;I)Z
|
public static final synthetic fun floatRangeContains (Lkotlin/ranges/ClosedRange;I)Z
|
||||||
@@ -4501,6 +4507,12 @@ public final class kotlin/ranges/RangesKt {
|
|||||||
public static final synthetic fun intRangeContains (Lkotlin/ranges/ClosedRange;F)Z
|
public static final synthetic fun intRangeContains (Lkotlin/ranges/ClosedRange;F)Z
|
||||||
public static final fun intRangeContains (Lkotlin/ranges/ClosedRange;J)Z
|
public static final fun intRangeContains (Lkotlin/ranges/ClosedRange;J)Z
|
||||||
public static final fun intRangeContains (Lkotlin/ranges/ClosedRange;S)Z
|
public static final fun intRangeContains (Lkotlin/ranges/ClosedRange;S)Z
|
||||||
|
public static final fun last (Lkotlin/ranges/CharProgression;)C
|
||||||
|
public static final fun last (Lkotlin/ranges/IntProgression;)I
|
||||||
|
public static final fun last (Lkotlin/ranges/LongProgression;)J
|
||||||
|
public static final fun lastOrNull (Lkotlin/ranges/CharProgression;)Ljava/lang/Character;
|
||||||
|
public static final fun lastOrNull (Lkotlin/ranges/IntProgression;)Ljava/lang/Integer;
|
||||||
|
public static final fun lastOrNull (Lkotlin/ranges/LongProgression;)Ljava/lang/Long;
|
||||||
public static final fun longRangeContains (Lkotlin/ranges/ClosedRange;B)Z
|
public static final fun longRangeContains (Lkotlin/ranges/ClosedRange;B)Z
|
||||||
public static final synthetic fun longRangeContains (Lkotlin/ranges/ClosedRange;D)Z
|
public static final synthetic fun longRangeContains (Lkotlin/ranges/ClosedRange;D)Z
|
||||||
public static final synthetic fun longRangeContains (Lkotlin/ranges/ClosedRange;F)Z
|
public static final synthetic fun longRangeContains (Lkotlin/ranges/ClosedRange;F)Z
|
||||||
@@ -4640,6 +4652,14 @@ public final class kotlin/ranges/URangesKt {
|
|||||||
public static final fun downTo-J1ME1BU (II)Lkotlin/ranges/UIntProgression;
|
public static final fun downTo-J1ME1BU (II)Lkotlin/ranges/UIntProgression;
|
||||||
public static final fun downTo-Kr8caGY (BB)Lkotlin/ranges/UIntProgression;
|
public static final fun downTo-Kr8caGY (BB)Lkotlin/ranges/UIntProgression;
|
||||||
public static final fun downTo-eb3DHEI (JJ)Lkotlin/ranges/ULongProgression;
|
public static final fun downTo-eb3DHEI (JJ)Lkotlin/ranges/ULongProgression;
|
||||||
|
public static final fun first (Lkotlin/ranges/UIntProgression;)I
|
||||||
|
public static final fun first (Lkotlin/ranges/ULongProgression;)J
|
||||||
|
public static final fun firstOrNull (Lkotlin/ranges/UIntProgression;)Lkotlin/UInt;
|
||||||
|
public static final fun firstOrNull (Lkotlin/ranges/ULongProgression;)Lkotlin/ULong;
|
||||||
|
public static final fun last (Lkotlin/ranges/UIntProgression;)I
|
||||||
|
public static final fun last (Lkotlin/ranges/ULongProgression;)J
|
||||||
|
public static final fun lastOrNull (Lkotlin/ranges/UIntProgression;)Lkotlin/UInt;
|
||||||
|
public static final fun lastOrNull (Lkotlin/ranges/ULongProgression;)Lkotlin/ULong;
|
||||||
public static final fun random (Lkotlin/ranges/UIntRange;Lkotlin/random/Random;)I
|
public static final fun random (Lkotlin/ranges/UIntRange;Lkotlin/random/Random;)I
|
||||||
public static final fun random (Lkotlin/ranges/ULongRange;Lkotlin/random/Random;)J
|
public static final fun random (Lkotlin/ranges/ULongRange;Lkotlin/random/Random;)J
|
||||||
public static final fun randomOrNull (Lkotlin/ranges/UIntRange;Lkotlin/random/Random;)Lkotlin/UInt;
|
public static final fun randomOrNull (Lkotlin/ranges/UIntRange;Lkotlin/random/Random;)Lkotlin/UInt;
|
||||||
|
|||||||
@@ -26,6 +26,11 @@ object Elements : TemplateGroupBase() {
|
|||||||
sourceFile(SourceFile.URanges)
|
sourceFile(SourceFile.URanges)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
specialFor(ProgressionsOfPrimitives) {
|
||||||
|
if (primitive in PrimitiveType.unsignedPrimitives) {
|
||||||
|
sourceFile(SourceFile.URanges)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -443,10 +448,13 @@ object Elements : TemplateGroupBase() {
|
|||||||
val f_first = fn("first()") {
|
val f_first = fn("first()") {
|
||||||
includeDefault()
|
includeDefault()
|
||||||
include(CharSequences, Lists, ArraysOfUnsigned)
|
include(CharSequences, Lists, ArraysOfUnsigned)
|
||||||
|
include(ProgressionsOfPrimitives, PrimitiveType.rangePrimitives)
|
||||||
} builder {
|
} builder {
|
||||||
doc { """Returns first ${f.element}.
|
specialFor(ProgressionsOfPrimitives) {
|
||||||
@throws [NoSuchElementException] if the ${f.collection} is empty.
|
since("1.7")
|
||||||
""" }
|
}
|
||||||
|
doc { "Returns the first ${f.element}." }
|
||||||
|
throws("NoSuchElementException", "if the ${f.collection} is empty.")
|
||||||
returns("T")
|
returns("T")
|
||||||
body {
|
body {
|
||||||
"""
|
"""
|
||||||
@@ -476,6 +484,13 @@ object Elements : TemplateGroupBase() {
|
|||||||
return iterator.next()
|
return iterator.next()
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
body(ProgressionsOfPrimitives) {
|
||||||
|
"""
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression ${'$'}this is empty.")
|
||||||
|
return this.first
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
|
||||||
specialFor(ArraysOfUnsigned) {
|
specialFor(ArraysOfUnsigned) {
|
||||||
inlineOnly()
|
inlineOnly()
|
||||||
@@ -486,7 +501,11 @@ object Elements : TemplateGroupBase() {
|
|||||||
val f_firstOrNull = fn("firstOrNull()") {
|
val f_firstOrNull = fn("firstOrNull()") {
|
||||||
includeDefault()
|
includeDefault()
|
||||||
include(CharSequences, Lists, ArraysOfUnsigned)
|
include(CharSequences, Lists, ArraysOfUnsigned)
|
||||||
|
include(ProgressionsOfPrimitives, PrimitiveType.rangePrimitives)
|
||||||
} builder {
|
} builder {
|
||||||
|
specialFor(ProgressionsOfPrimitives) {
|
||||||
|
since("1.7")
|
||||||
|
}
|
||||||
doc { "Returns the first ${f.element}, or `null` if the ${f.collection} is empty." }
|
doc { "Returns the first ${f.element}, or `null` if the ${f.collection} is empty." }
|
||||||
returns("T?")
|
returns("T?")
|
||||||
body {
|
body {
|
||||||
@@ -520,6 +539,11 @@ object Elements : TemplateGroupBase() {
|
|||||||
return iterator.next()
|
return iterator.next()
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
body(ProgressionsOfPrimitives) {
|
||||||
|
"""
|
||||||
|
return if (isEmpty()) null else this.first
|
||||||
|
"""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val f_first_predicate = fn("first(predicate: (T) -> Boolean)") {
|
val f_first_predicate = fn("first(predicate: (T) -> Boolean)") {
|
||||||
@@ -578,7 +602,11 @@ object Elements : TemplateGroupBase() {
|
|||||||
val f_last = fn("last()") {
|
val f_last = fn("last()") {
|
||||||
includeDefault()
|
includeDefault()
|
||||||
include(CharSequences, Lists, ArraysOfUnsigned)
|
include(CharSequences, Lists, ArraysOfUnsigned)
|
||||||
|
include(ProgressionsOfPrimitives, PrimitiveType.rangePrimitives)
|
||||||
} builder {
|
} builder {
|
||||||
|
specialFor(ProgressionsOfPrimitives) {
|
||||||
|
since("1.7")
|
||||||
|
}
|
||||||
doc { "Returns the last ${f.element}." }
|
doc { "Returns the last ${f.element}." }
|
||||||
throws("NoSuchElementException", "if the ${f.collection} is empty.")
|
throws("NoSuchElementException", "if the ${f.collection} is empty.")
|
||||||
sample("${f.sampleClass}.last")
|
sample("${f.sampleClass}.last")
|
||||||
@@ -617,6 +645,13 @@ object Elements : TemplateGroupBase() {
|
|||||||
return this[lastIndex]
|
return this[lastIndex]
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
body(ProgressionsOfPrimitives) {
|
||||||
|
"""
|
||||||
|
if (isEmpty())
|
||||||
|
throw NoSuchElementException("Progression ${'$'}this is empty.")
|
||||||
|
return this.last
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
|
||||||
specialFor(ArraysOfUnsigned) {
|
specialFor(ArraysOfUnsigned) {
|
||||||
inlineOnly()
|
inlineOnly()
|
||||||
@@ -627,7 +662,11 @@ object Elements : TemplateGroupBase() {
|
|||||||
val f_lastOrNull = fn("lastOrNull()") {
|
val f_lastOrNull = fn("lastOrNull()") {
|
||||||
includeDefault()
|
includeDefault()
|
||||||
include(Lists, CharSequences, ArraysOfUnsigned)
|
include(Lists, CharSequences, ArraysOfUnsigned)
|
||||||
|
include(ProgressionsOfPrimitives, PrimitiveType.rangePrimitives)
|
||||||
} builder {
|
} builder {
|
||||||
|
specialFor(ProgressionsOfPrimitives) {
|
||||||
|
since("1.7")
|
||||||
|
}
|
||||||
doc { "Returns the last ${f.element}, or `null` if the ${f.collection} is empty." }
|
doc { "Returns the last ${f.element}, or `null` if the ${f.collection} is empty." }
|
||||||
sample("${f.sampleClass}.last")
|
sample("${f.sampleClass}.last")
|
||||||
returns("T?")
|
returns("T?")
|
||||||
@@ -668,6 +707,11 @@ object Elements : TemplateGroupBase() {
|
|||||||
return if (isEmpty()) null else this[size - 1]
|
return if (isEmpty()) null else this[size - 1]
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
body(ProgressionsOfPrimitives) {
|
||||||
|
"""
|
||||||
|
return if (isEmpty()) null else this.last
|
||||||
|
"""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val f_last_predicate = fn("last(predicate: (T) -> Boolean)") {
|
val f_last_predicate = fn("last(predicate: (T) -> Boolean)") {
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ object DocExtensions {
|
|||||||
CharSequences -> "char sequence"
|
CharSequences -> "char sequence"
|
||||||
ArraysOfObjects, ArraysOfPrimitives, InvariantArraysOfObjects, ArraysOfUnsigned -> "array"
|
ArraysOfObjects, ArraysOfPrimitives, InvariantArraysOfObjects, ArraysOfUnsigned -> "array"
|
||||||
Ranges, RangesOfPrimitives -> "range"
|
Ranges, RangesOfPrimitives -> "range"
|
||||||
|
ProgressionsOfPrimitives -> "progression"
|
||||||
Strings, Sequences, Maps, Lists, Sets -> name.singularize().decapitalize()
|
Strings, Sequences, Maps, Lists, Sets -> name.singularize().decapitalize()
|
||||||
else -> "collection"
|
else -> "collection"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user