package std.util // Number of extension function for ava.lang.Iterable that shouldn't participate in auto generation import java.util.Collection import java.util.List import java.util.AbstractList /** * Count the number of elements in collection. * * If base collection implements Collection interface method Collection#size() will be used. * Otherwise, this method determines the count by iterating through the all items. */ fun java.lang.Iterable.count() : Int { if (this is Collection) { return this.size() } var number : Int = 0 for (elem in this) { ++number } return number } /** * Get the first element in the collection. * * Will throw an exception if there are no elements * TODO: Specify type of the exception */ inline fun java.lang.Iterable.first() : T { if (this is AbstractList) { return this.get(0) } return this.iterator().sure().next() } /** * Get the last element in the collection. * * If base collection implements List interface, the combination of size() and get() * methods will be used for getting last element. Otherwise, this method determines the * last item by iterating through the all items. * * Will throw an exception if there are no elements. * TODO: Specify type of the exception */ fun java.lang.Iterable.last() : T { if (this is List) { return this.get(this.size() - 1); } val iterator = this.iterator().sure() var last : T = iterator.next() while (iterator.hasNext()) { last = iterator.next() } return last; } /** * Checks if collection contains given item. * * Method checks equality of the objects with T.equals method. * If collection implements java.util.AbstractCollection an overridden implementation of the contains * method will be used. */ fun java.lang.Iterable.contains(item : T) : Boolean { std.io.println("!!!!!") if (this is java.util.AbstractCollection) { return this.contains(item); } for (var elem in this) { if (elem.equals(item)) { return true } } return false }