@@ -4,12 +4,13 @@ import Predef.{augmentString => _, wrapString => _, _}
4
4
import scala .reflect .ClassTag
5
5
import annotation .unchecked .uncheckedVariance
6
6
import annotation .tailrec
7
+ import scala .language .higherKinds
7
8
8
9
/* ------------ Base Traits -------------------------------- */
9
10
10
11
/** Iterator can be used only once */
11
12
trait IterableOnce [+ A ] {
12
- def iterator : Iterator [A ]
13
+ def iterator () : Iterator [A ]
13
14
}
14
15
15
16
/** Base trait for instances that can construct a collection from an iterable */
@@ -50,14 +51,14 @@ trait LinearSeq[+A] extends Seq[A] with LinearSeqLike[A, LinearSeq] { self =>
50
51
def tail : LinearSeq [A ]
51
52
52
53
/** `iterator` is overridden in terms of `head` and `tail` */
53
- def iterator = new Iterator [A ] {
54
+ def iterator () = new Iterator [A ] {
54
55
private [this ] var current : Seq [A ] = self
55
56
def hasNext = ! current.isEmpty
56
- def next = { val r = current.head; current = current.tail; r }
57
+ def next () = { val r = current.head; current = current.tail; r }
57
58
}
58
59
59
60
/** `length` is defined in terms of `iterator` */
60
- def length : Int = iterator.length
61
+ def length : Int = iterator() .length
61
62
62
63
/** `apply` is defined in terms of `drop`, which is in turn defined in
63
64
* terms of `tail`.
@@ -78,8 +79,8 @@ trait IndexedSeq[+A] extends Seq[A] { self =>
78
79
}
79
80
80
81
/** Base trait for strict collections that can be built using a builder.
81
- * @param A the element type of the collection
82
- * @param Repr the type of the underlying collection
82
+ * @tparam A the element type of the collection
83
+ * @tparam Repr the type of the underlying collection
83
84
*/
84
85
trait Buildable [+ A , + Repr ] extends Any with IterableMonoTransforms [A , Repr ] {
85
86
@@ -89,7 +90,7 @@ trait Buildable[+A, +Repr] extends Any with IterableMonoTransforms[A, Repr] {
89
90
/** Optimized, push-based version of `partition`. */
90
91
override def partition (p : A => Boolean ): (Repr , Repr ) = {
91
92
val l, r = newBuilder
92
- coll.iterator.foreach(x => (if (p(x)) l else r) += x)
93
+ coll.iterator() .foreach(x => (if (p(x)) l else r) += x)
93
94
(l.result, r.result)
94
95
}
95
96
@@ -108,7 +109,7 @@ trait Builder[-A, +To] { self =>
108
109
109
110
/** Bulk append. Can be overridden if specialized implementations are available. */
110
111
def ++= (xs : IterableOnce [A ]): this .type = {
111
- xs.iterator.foreach(+= )
112
+ xs.iterator() .foreach(+= )
112
113
this
113
114
}
114
115
@@ -177,25 +178,25 @@ trait LinearSeqLike[+A, +C[X] <: LinearSeq[X]] extends SeqLike[A, C] {
177
178
*/
178
179
trait IterableOps [+ A ] extends Any {
179
180
protected def coll : Iterable [A ]
180
- private def iterator = coll.iterator
181
+ private def iterator () = coll.iterator()
181
182
182
183
/** Apply `f` to each element for tis side effects */
183
- def foreach (f : A => Unit ): Unit = iterator.foreach(f)
184
+ def foreach (f : A => Unit ): Unit = iterator() .foreach(f)
184
185
185
186
/** Fold left */
186
- def foldLeft [B ](z : B )(op : (B , A ) => B ): B = iterator.foldLeft(z)(op)
187
+ def foldLeft [B ](z : B )(op : (B , A ) => B ): B = iterator() .foldLeft(z)(op)
187
188
188
189
/** Fold right */
189
- def foldRight [B ](z : B )(op : (A , B ) => B ): B = iterator.foldRight(z)(op)
190
+ def foldRight [B ](z : B )(op : (A , B ) => B ): B = iterator() .foldRight(z)(op)
190
191
191
192
/** The index of the first element in this collection for which `p` holds. */
192
- def indexWhere (p : A => Boolean ): Int = iterator.indexWhere(p)
193
+ def indexWhere (p : A => Boolean ): Int = iterator() .indexWhere(p)
193
194
194
195
/** Is the collection empty? */
195
- def isEmpty : Boolean = ! iterator.hasNext
196
+ def isEmpty : Boolean = ! iterator() .hasNext
196
197
197
198
/** The first element of the collection. */
198
- def head : A = iterator.next()
199
+ def head : A = iterator() .next()
199
200
200
201
/** The number of elements in this collection, if it can be cheaply computed,
201
202
* -1 otherwise. Cheaply usually means: Not requiring a collection traversal.
@@ -205,10 +206,10 @@ trait IterableOps[+A] extends Any {
205
206
/** The number of elements in this collection. Does not terminate for
206
207
* infinite collections.
207
208
*/
208
- def size : Int = if (knownSize >= 0 ) knownSize else iterator.length
209
+ def size : Int = if (knownSize >= 0 ) knownSize else iterator() .length
209
210
210
211
/** A view representing the elements of this collection. */
211
- def view : View [A ] = View .fromIterator(iterator)
212
+ def view : View [A ] = View .fromIterator(iterator() )
212
213
213
214
/** Given a collection factory `fi` for collections of type constructor `C`,
214
215
* convert this collection to one of type `C[A]`. Example uses:
@@ -229,7 +230,7 @@ trait IterableOps[+A] extends Any {
229
230
/** Copy all elements of this collection to array `xs`, starting at `start`. */
230
231
def copyToArray [B >: A ](xs : Array [B ], start : Int = 0 ): xs.type = {
231
232
var i = start
232
- val it = iterator
233
+ val it = iterator()
233
234
while (it.hasNext) {
234
235
xs(i) = it.next()
235
236
i += 1
@@ -320,7 +321,7 @@ trait SeqMonoTransforms[+A, +Repr] extends Any with IterableMonoTransforms[A, Re
320
321
case v : IndexedView [A ] => fromIterableWithSameElemType(v.reverse)
321
322
case _ =>
322
323
var xs : List [A ] = Nil
323
- var it = coll.iterator
324
+ var it = coll.iterator()
324
325
while (it.hasNext) xs = it.next() :: xs
325
326
fromIterableWithSameElemType(xs)
326
327
}
@@ -386,7 +387,7 @@ extends Seq[A]
386
387
private var aliased = false
387
388
private var len = 0
388
389
389
- def iterator = first.iterator
390
+ def iterator () = first.iterator()
390
391
391
392
def fromIterable [B ](coll : Iterable [B ]) = ListBuffer .fromIterable(coll)
392
393
@@ -451,7 +452,7 @@ extends Seq[A]
451
452
452
453
override def view = new ArrayBufferView (elems, start, end)
453
454
454
- def iterator = view.iterator
455
+ def iterator () = view.iterator()
455
456
456
457
def fromIterable [B ](it : Iterable [B ]): ArrayBuffer [B ] =
457
458
ArrayBuffer .fromIterable(it)
@@ -506,7 +507,7 @@ object ArrayBuffer extends IterableFactory[ArrayBuffer] {
506
507
def fromIterable [B ](coll : Iterable [B ]): ArrayBuffer [B ] =
507
508
if (coll.knownSize >= 0 ) {
508
509
val elems = new Array [AnyRef ](coll.knownSize)
509
- val it = coll.iterator
510
+ val it = coll.iterator()
510
511
for (i <- 0 until elems.length) elems(i) = it.next().asInstanceOf [AnyRef ]
511
512
new ArrayBuffer [B ](elems, elems.length)
512
513
}
@@ -563,7 +564,7 @@ object LazyList extends IterableFactory[LazyList] {
563
564
564
565
def fromIterable [B ](coll : Iterable [B ]): LazyList [B ] = coll match {
565
566
case coll : LazyList [B ] => coll
566
- case _ => fromIterator(coll.iterator)
567
+ case _ => fromIterator(coll.iterator() )
567
568
}
568
569
569
570
def fromIterator [B ](it : Iterator [B ]): LazyList [B ] =
@@ -600,12 +601,11 @@ case class ArrayView[A](xs: Array[A]) extends IndexedView[A] {
600
601
/* ---------- Iterators ---------------------------------------------------*/
601
602
602
603
/** A core Iterator class */
603
- trait Iterator [+ A ] extends IterableOnce [ A ] { self =>
604
+ trait Iterator [+ A ] { self =>
604
605
def hasNext : Boolean
605
606
def next (): A
606
- def iterator = this
607
607
def foldLeft [B ](z : B )(op : (B , A ) => B ): B =
608
- if (hasNext) foldLeft(op(z, next))(op) else z
608
+ if (hasNext) foldLeft(op(z, next() ))(op) else z
609
609
def foldRight [B ](z : B )(op : (A , B ) => B ): B =
610
610
if (hasNext) op(next(), foldRight(z)(op)) else z
611
611
def foreach (f : A => Unit ): Unit =
@@ -652,7 +652,7 @@ trait Iterator[+A] extends IterableOnce[A] { self =>
652
652
private var myCurrent : Iterator [B ] = Iterator .empty
653
653
private def current = {
654
654
while (! myCurrent.hasNext && self.hasNext)
655
- myCurrent = f(self.next()).iterator
655
+ myCurrent = f(self.next()).iterator()
656
656
myCurrent
657
657
}
658
658
def hasNext = current.hasNext
@@ -663,7 +663,7 @@ trait Iterator[+A] extends IterableOnce[A] { self =>
663
663
private var first = true
664
664
private def current = {
665
665
if (! myCurrent.hasNext && first) {
666
- myCurrent = xs.iterator
666
+ myCurrent = xs.iterator()
667
667
first = false
668
668
}
669
669
myCurrent
@@ -674,7 +674,7 @@ trait Iterator[+A] extends IterableOnce[A] { self =>
674
674
def take (n : Int ): Iterator [A ] = new Iterator [A ] {
675
675
private var i = 0
676
676
def hasNext = self.hasNext && i < n
677
- def next =
677
+ def next () =
678
678
if (hasNext) {
679
679
i += 1
680
680
self.next()
@@ -690,7 +690,7 @@ trait Iterator[+A] extends IterableOnce[A] { self =>
690
690
this
691
691
}
692
692
def zip [B ](that : IterableOnce [B ]): Iterator [(A , B )] = new Iterator [(A , B )] {
693
- val thatIterator = that.iterator
693
+ val thatIterator = that.iterator()
694
694
def hasNext = self.hasNext && thatIterator.hasNext
695
695
def next () = (self.next(), thatIterator.next())
696
696
}
@@ -699,10 +699,10 @@ trait Iterator[+A] extends IterableOnce[A] { self =>
699
699
object Iterator {
700
700
val empty : Iterator [Nothing ] = new Iterator [Nothing ] {
701
701
def hasNext = false
702
- def next = throw new NoSuchElementException (" next on empty iterator" )
702
+ def next () = throw new NoSuchElementException (" next on empty iterator" )
703
703
}
704
704
def apply [A ](xs : A * ): Iterator [A ] = new IndexedView [A ] {
705
705
val length = xs.length
706
706
def apply (n : Int ) = xs(n)
707
- }.iterator
707
+ }.iterator()
708
708
}
0 commit comments