File tree Expand file tree Collapse file tree 1 file changed +18
-21
lines changed
library/src/scala/collection Expand file tree Collapse file tree 1 file changed +18
-21
lines changed Original file line number Diff line number Diff line change @@ -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,34 +760,31 @@ 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
789
793
790
override def toString = " unknown-if-empty iterator"
You can’t perform that action at this time.
0 commit comments