diff --git a/libraries/stdlib/src/Filter.kt b/libraries/stdlib/src/Filter.kt deleted file mode 100644 index c0a15369b75..00000000000 --- a/libraries/stdlib/src/Filter.kt +++ /dev/null @@ -1,49 +0,0 @@ -package kotlin - -import java.util.* -import java.lang.Iterable - -/** Filters given iterator */ -inline fun java.util.Iterator.filter(f: (T)-> Boolean) : java.util.Iterator = FilterIterator(this, f) - -/** Create iterator filtering given java.lang.Iterable */ -/* -inline fun java.lang.Iterable.filter(f: (T)->Boolean) : java.util.Iterator = (iterator() as java.util.Iterator).filter(f) -*/ - -private class FilterIterator(val original: java.util.Iterator, val filter: (T)-> Boolean) : java.util.Iterator { - var state = 0 - var nextElement: T? = null - - override fun hasNext(): Boolean = - when(state) { - 1 -> true // checked and next present - 2 -> false // checked and next not present - else -> { - while(original.hasNext()) { - val candidate = original.next() - if((filter)(candidate)) { - nextElement = candidate - state = 1 - true - } - } - state = 2 - false - } - } - - override fun next(): T = - if(state != 1) - throw java.util.NoSuchElementException() - else { - val res = nextElement as T - nextElement = null - state = 0 - res - } - - override fun remove() { - throw java.lang.UnsupportedOperationException() - } -} diff --git a/libraries/stdlib/src/Iterators.kt b/libraries/stdlib/src/Iterators.kt index 0ac624a5479..99f82c0dfdf 100644 --- a/libraries/stdlib/src/Iterators.kt +++ b/libraries/stdlib/src/Iterators.kt @@ -21,33 +21,19 @@ private class FilterIsIterator(val iter: java.util.Iterator, val kla } } - -// TODO when we're past the compiler error -// http://youtrack.jetbrains.com/issue/KT-1646 -// -// we can use this code to replace the other -// filter / FilterIterator class as it reuses the -// core logic from AbstractIterator - /** Returns a new lazy iterator containing all elements in this iteration which match the given predicate */ -inline fun java.util.Iterator.filter2(predicate: (T)-> Boolean) : java.util.Iterator { - return FilterIterator2(this, predicate) +inline fun java.util.Iterator.filter(predicate: (T)-> Boolean) : java.util.Iterator { + return FilterIterator(this, predicate) } -private class FilterIterator2(val iter: java.util.Iterator, val fn: (T)-> Boolean) : AbstractIterator() { +private class FilterIterator(val iter: java.util.Iterator, val predicate: (T)-> Boolean) : AbstractIterator() { override protected fun computeNext(): T? { - /* - - TODO this block generates a compiler error: - http://youtrack.jetbrains.com/issue/KT-1646 - while (iter.hasNext()) { val element = iter.next() - if (fn(element)) { + if ((predicate)(element)) { return element } } - */ done() return null }