package kotlin // // NOTE THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt // See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib // import java.util.* /** * Returns *true* if all elements match the given *predicate* */ public inline fun IntArray.all(predicate: (Int) -> Boolean) : Boolean { for (element in this) if (!predicate(element)) return false return true } /** * Returns *true* if any elements match the given *predicate* */ public inline fun IntArray.any(predicate: (Int) -> Boolean) : Boolean { for (element in this) if (predicate(element)) return true return false } /** * Appends the string from all the elements separated using the *separator* and using the given *prefix* and *postfix* if supplied * If a collection could be huge you can specify a non-negative value of *limit* which will only show a subset of the collection then it will * a special *truncated* separator (which defaults to "..." */ public inline fun IntArray.appendString(buffer: Appendable, separator: String = ", ", prefix: String ="", postfix: String = "", limit: Int = -1, truncated: String = "...") : Unit { buffer.append(prefix) var count = 0 for (element in this) { if (++count > 1) buffer.append(separator) if (limit < 0 || count <= limit) { val text = if (element == null) "null" else element.toString() buffer.append(text) } else break } if (limit >= 0 && count > limit) buffer.append(truncated) buffer.append(postfix) } /** * Returns the number of elements which match the given *predicate* */ public inline fun IntArray.count(predicate: (Int) -> Boolean) : Int { var count = 0 for (element in this) if (predicate(element)) count++ return count } /** * Returns a list containing everything but the first *n* elements */ public inline fun IntArray.drop(n: Int) : List { return dropWhile(countTo(n)) } /** * Returns a list containing the everything but the first elements that satisfy the given *predicate* */ public inline fun IntArray.dropWhile(predicate: (Int) -> Boolean) : List { return dropWhileTo(ArrayList(), predicate) } /** * Returns a list containing the everything but the first elements that satisfy the given *predicate* */ public inline fun > IntArray.dropWhileTo(result: L, predicate: (Int) -> Boolean) : L { var start = true for (element in this) { if (start && predicate(element)) { // ignore } else { start = false result.add(element) } } return result } /** * Returns a list containing all elements which match the given *predicate* */ public inline fun IntArray.filter(predicate: (Int) -> Boolean) : List { return filterTo(ArrayList(), predicate) } /** * Returns a list containing all elements which do not match the given *predicate* */ public inline fun IntArray.filterNot(predicate: (Int) -> Boolean) : List { return filterNotTo(ArrayList(), predicate) } /** * Returns a list containing all elements which do not match the given *predicate* */ public inline fun > IntArray.filterNotTo(result: C, predicate: (Int) -> Boolean) : C { for (element in this) if (!predicate(element)) result.add(element) return result } /** * Filters all elements which match the given predicate into the given list */ public inline fun > IntArray.filterTo(result: C, predicate: (Int) -> Boolean) : C { for (element in this) if (predicate(element)) result.add(element) return result } /** * Returns the first element which matches the given *predicate* or *null* if none matched */ public inline fun IntArray.find(predicate: (Int) -> Boolean) : Int? { for (element in this) if (predicate(element)) return element return null } /** * Returns the result of transforming each element to one or more values which are concatenated together into a single list */ public inline fun IntArray.flatMap(transform: (Int)-> Iterable) : List { return flatMapTo(ArrayList(), transform) } /** * Returns the result of transforming each element to one or more values which are concatenated together into a single collection */ public inline fun > IntArray.flatMapTo(result: C, transform: (Int) -> Iterable) : C { for (element in this) { val list = transform(element) for (r in list) result.add(r) } return result } /** * Folds all elements from from left to right with the *initial* value to perform the operation on sequential pairs of elements */ public inline fun IntArray.fold(initial: R, operation: (R, Int) -> R) : R { var answer = initial for (element in this) answer = operation(answer, element) return answer } /** * Folds all elements from right to left with the *initial* value to perform the operation on sequential pairs of elements */ public inline fun IntArray.foldRight(initial: R, operation: (Int, R) -> R) : R { var r = initial var index = size - 1 while (index >= 0) { r = operation(get(index--), r) } return r } /** * Performs the given *operation* on each element */ public inline fun IntArray.forEach(operation: (Int) -> Unit) : Unit { for (element in this) operation(element) } /** * Groups the elements in the collection into a new [[Map]] using the supplied *toKey* function to calculate the key to group the elements by */ public inline fun IntArray.groupBy(toKey: (Int) -> K) : Map> { return groupByTo(HashMap>(), toKey) } public inline fun IntArray.groupByTo(result: MutableMap>, toKey: (Int) -> K) : Map> { for (element in this) { val key = toKey(element) val list = result.getOrPut(key) { ArrayList() } list.add(element) } return result } /** * Returns true if the array is empty */ public fun IntArray.isEmpty() : Boolean { return size == 0 } /** * Returns true if the array is empty */ public fun IntArray.isNotEmpty() : Boolean { return !isEmpty() } /** * Creates a string from all the elements separated using the *separator* and using the given *prefix* and *postfix* if supplied. * If a collection could be huge you can specify a non-negative value of *limit* which will only show a subset of the collection then it will * a special *truncated* separator (which defaults to "..." */ public inline fun IntArray.makeString(separator: String = ", ", prefix: String = "", postfix: String = "", limit: Int = -1, truncated: String = "...") : String { val buffer = StringBuilder() appendString(buffer, separator, prefix, postfix, limit, truncated) return buffer.toString() } /** * Returns a new List containing the results of applying the given *transform* function to each element in this collection */ public inline fun IntArray.map(transform : (Int) -> R) : List { return mapTo(ArrayList(), transform) } /** * Transforms each element of this collection with the given *transform* function and * adds each return value to the given *results* collection */ public inline fun > IntArray.mapTo(result: C, transform : (Int) -> R) : C { for (item in this) result.add(transform(item)) return result } /** * Returns the largest element or null if there are no elements */ public fun IntArray.max() : Int? { var max: Int? = null for (e in this) { if (max == null || max!! < e) { max = e } } return max } /** * Returns the first element yielding the largest value of the given function or null if there are no elements */ public inline fun > IntArray.maxBy(f: (Int) -> R) : Int? { if (isEmpty()) return null var maxElem = this[0] var maxValue = f(maxElem) for (i in 1..lastIndex) { val e = this[i] val v = f(e) if (maxValue < v) { maxElem = e maxValue = v } } return maxElem } /** * Returns the smallest element or null if there are no elements */ public fun IntArray.min() : Int? { var min: Int? = null for (e in this) { if (min == null || min!! > e) { min = e } } return min } /** * Returns the first element yielding the smallest value of the given function or null if there are no elements */ public inline fun > IntArray.minBy(f: (Int) -> R) : Int? { if (size == 0) return null var minElem = this[0] var minValue = f(minElem) for (i in 1..lastIndex) { val e = this[i] val v = f(e) if (minValue > v) { minElem = e minValue = v } } return minElem } /** * Partitions this collection into a pair of collections */ public inline fun IntArray.partition(predicate: (Int) -> Boolean) : Pair, List> { val first = ArrayList() val second = ArrayList() for (element in this) { if (predicate(element)) { first.add(element) } else { second.add(element) } } return Pair(first, second) } /** * Creates an [[Iterator]] which iterates over this iterator then the following collection */ public inline fun IntArray.plus(collection: Iterable) : List { return plus(collection.iterator()) } /** * Creates an [[Iterator]] which iterates over this iterator then the given element at the end */ public inline fun IntArray.plus(element: Int) : List { val answer = ArrayList() toCollection(answer) answer.add(element) return answer } /** * Creates an [[Iterator]] which iterates over this iterator then the following iterator */ public inline fun IntArray.plus(iterator: Iterator) : List { val answer = ArrayList() toCollection(answer) for (element in iterator) { answer.add(element) } return answer } /** * Applies binary operation to all elements of iterable, going from left to right. * Similar to fold function, but uses the first element as initial value */ public inline fun IntArray.reduce(operation: (Int, Int) -> Int) : Int { val iterator = this.iterator() if (!iterator.hasNext()) { throw UnsupportedOperationException("Empty iterable can't be reduced") } var result: Int = iterator.next() //compiler doesn't understand that result will initialized anyway while (iterator.hasNext()) { result = operation(result, iterator.next()) } return result } /** * Applies binary operation to all elements of iterable, going from right to left. * Similar to foldRight function, but uses the last element as initial value */ public inline fun IntArray.reduceRight(operation: (Int, Int) -> Int) : Int { var index = size - 1 if (index < 0) { throw UnsupportedOperationException("Empty iterable can't be reduced") } var r = get(index--) while (index >= 0) { r = operation(get(index--), r) } return r } /** * Reverses the order the elements into a list */ public inline fun IntArray.reverse() : List { val list = toCollection(ArrayList()) Collections.reverse(list) return list } /** * Copies all elements into a [[List]] and sorts it by value of compare_function(element) * E.g. arrayList("two" to 2, "one" to 1).sortBy({it.second}) returns list sorted by second element of pair */ public inline fun > IntArray.sortBy(f: (Int) -> R) : List { val sortedList = toCollection(ArrayList()) val sortBy: Comparator = comparator {(x: Int, y: Int) -> val xr = f(x) val yr = f(y) xr.compareTo(yr) } java.util.Collections.sort(sortedList, sortBy) return sortedList } /** * Returns a list containing the first *n* elements */ public inline fun IntArray.take(n: Int) : List { return takeWhile(countTo(n)) } /** * Returns a list containing the first elements that satisfy the given *predicate* */ public inline fun IntArray.takeWhile(predicate: (Int) -> Boolean) : List { return takeWhileTo(ArrayList(), predicate) } /** * Returns a list containing the first elements that satisfy the given *predicate* */ public inline fun > IntArray.takeWhileTo(result: C, predicate: (Int) -> Boolean) : C { for (element in this) if (predicate(element)) result.add(element) else break return result } /** * Copies all elements into the given collection */ public inline fun > IntArray.toCollection(result: C) : C { for (element in this) result.add(element) return result } /** * Copies all elements into a [[LinkedList]] */ public inline fun IntArray.toLinkedList() : LinkedList { return toCollection(LinkedList()) } /** * Copies all elements into a [[List]] */ public inline fun IntArray.toList() : List { return toCollection(ArrayList()) } /** * Copies all elements into a [[Set]] */ public inline fun IntArray.toSet() : Set { return toCollection(LinkedHashSet()) } /** * Copies all elements into a [[SortedSet]] */ public inline fun IntArray.toSortedSet() : SortedSet { return toCollection(TreeSet()) } /** * Returns an iterator of Pairs(index, data) */ public inline fun IntArray.withIndices() : Iterator> { return IndexIterator(iterator()) } /** * Sums up the elements */ public fun IntArray.sum() : Int { return fold(0, {a,b -> a+b}) }