@@ -290,8 +290,6 @@ object Iterator {
290
290
}
291
291
}
292
292
293
- import Iterator .empty
294
-
295
293
/** Iterators are data structures that allow to iterate over a sequence
296
294
* of elements. They have a `hasNext` method for checking
297
295
* if there is a next element available, and a `next` method
@@ -357,6 +355,8 @@ import Iterator.empty
357
355
trait Iterator [+ A ] extends TraversableOnce [A ] {
358
356
self =>
359
357
358
+ import Iterator .empty
359
+
360
360
def seq : Iterator [A ] = this
361
361
362
362
/** Tests whether this iterator can provide another element.
@@ -760,37 +760,32 @@ trait Iterator[+A] extends TraversableOnce[A] {
760
760
* -1 not yet accessed
761
761
* 0 single element waiting in leading
762
762
* 1 defer to self
763
+ * 2 self.hasNext already
764
+ * 3 exhausted
763
765
*/
764
766
private [this ] var status = - 1
765
- def hasNext = {
766
- if (status > 0 ) self.hasNext
767
- else {
768
- if (status == 0 ) true
769
- else if (myLeading.finish()) {
770
- status = 0
771
- true
772
- }
773
- else {
774
- status = 1
775
- myLeading = null
776
- self.hasNext
777
- }
778
- }
767
+ def hasNext = status match {
768
+ case 3 => false
769
+ case 2 => true
770
+ case 1 => if (self.hasNext) { status = 2 ; true } else { status = 3 ; false }
771
+ case 0 => true
772
+ case _ =>
773
+ if (myLeading.finish()) { status = 0 ; true } else { status = 1 ; myLeading = null ; hasNext }
779
774
}
780
775
def next () = {
781
776
if (hasNext) {
782
- if (status > 0 ) self.next()
783
- else {
777
+ if (status == 0 ) {
784
778
status = 1
785
- val ans = myLeading.trailer
779
+ val res = myLeading.trailer
786
780
myLeading = null
787
- ans
781
+ res
782
+ } else {
783
+ status = 1
784
+ self.next()
788
785
}
789
786
}
790
- else Iterator . empty.next()
787
+ else empty.next()
791
788
}
792
-
793
- override def toString = " unknown-if-empty iterator"
794
789
}
795
790
796
791
(leading, trailing)
@@ -1421,11 +1416,11 @@ trait Iterator[+A] extends TraversableOnce[A] {
1421
1416
1422
1417
/** Converts this iterator to a string.
1423
1418
*
1424
- * @return `"empty iterator"` or `"non-empty iterator"`, depending on
1419
+ * @return `"< iterator>"`
1425
1420
* whether or not the iterator is empty.
1426
1421
* @note Reuse: $preservesIterator
1427
1422
*/
1428
- override def toString = ( if (hasNext) " non-empty " else " empty " ) + " iterator"
1423
+ override def toString = " < iterator> "
1429
1424
}
1430
1425
1431
1426
/** Explicit instantiation of the `Iterator` trait to reduce class file size in subclasses. */
0 commit comments