@@ -34,25 +34,25 @@ trait SeqViewLike[+A,
34
34
{ self =>
35
35
36
36
/** Explicit instantiation of the `Transformed` trait to reduce class file size in subclasses. */
37
- private [collection] abstract class AbstractTransformed [+ B ] extends Seq [B ] with super [IterableViewLike ].Transformed [B ] with Transformed [B ]
37
+ private [collection] abstract class AbstractTransformedS [+ B ] extends Seq [B ] with super [IterableViewLike ].TransformedI [B ] with TransformedS [B ]
38
38
39
- trait Transformed [+ B ] extends SeqView [B , Coll ] with super .Transformed [B ] {
39
+ trait TransformedS [+ B ] extends SeqView [B , Coll ] with super .TransformedI [B ] {
40
40
def length : Int
41
41
def apply (idx : Int ): B
42
42
override def toString = viewToString
43
43
}
44
44
45
- trait EmptyView extends Transformed [Nothing ] with super .EmptyView {
45
+ trait EmptyViewS extends TransformedS [Nothing ] with super .EmptyViewI {
46
46
final override def length = 0
47
47
final override def apply (n : Int ) = Nil (n)
48
48
}
49
49
50
- trait Forced [B ] extends super .Forced [B ] with Transformed [B ] {
50
+ trait ForcedS [B ] extends super .ForcedI [B ] with TransformedS [B ] {
51
51
def length = forced.length
52
52
def apply (idx : Int ) = forced.apply(idx)
53
53
}
54
54
55
- trait Sliced extends super .Sliced with Transformed [A ] {
55
+ trait SlicedS extends super .SlicedI with TransformedS [A ] {
56
56
def length = iterator.size
57
57
def apply (idx : Int ): A =
58
58
if (idx >= 0 && idx + from < until) self.apply(idx + from)
@@ -62,12 +62,12 @@ trait SeqViewLike[+A,
62
62
override def iterator : Iterator [A ] = self.iterator drop from take endpoints.width
63
63
}
64
64
65
- trait Mapped [B ] extends super .Mapped [B ] with Transformed [B ] {
65
+ trait MappedS [B ] extends super .MappedI [B ] with TransformedS [B ] {
66
66
def length = self.length
67
67
def apply (idx : Int ): B = mapping(self(idx))
68
68
}
69
69
70
- trait FlatMapped [B ] extends super .FlatMapped [B ] with Transformed [B ] {
70
+ trait FlatMappedS [B ] extends super .FlatMappedI [B ] with TransformedS [B ] {
71
71
protected [this ] lazy val index = {
72
72
val index = new Array [Int ](self.length + 1 )
73
73
index(0 ) = 0
@@ -89,14 +89,14 @@ trait SeqViewLike[+A,
89
89
}
90
90
}
91
91
92
- trait Appended [B >: A ] extends super .Appended [B ] with Transformed [B ] {
92
+ trait AppendedS [B >: A ] extends super .AppendedI [B ] with TransformedS [B ] {
93
93
protected [this ] lazy val restSeq = rest.toSeq
94
94
def length = self.length + restSeq.length
95
95
def apply (idx : Int ) =
96
96
if (idx < self.length) self(idx) else restSeq(idx - self.length)
97
97
}
98
98
99
- trait Filtered extends super .Filtered with Transformed [A ] {
99
+ trait FilteredS extends super .FilteredI with TransformedS [A ] {
100
100
protected [this ] lazy val index = {
101
101
var len = 0
102
102
val arr = new Array [Int ](self.length)
@@ -111,38 +111,38 @@ trait SeqViewLike[+A,
111
111
def apply (idx : Int ) = self(index(idx))
112
112
}
113
113
114
- trait TakenWhile extends super .TakenWhile with Transformed [A ] {
114
+ trait TakenWhileS extends super .TakenWhileI with TransformedS [A ] {
115
115
protected [this ] lazy val len = self prefixLength pred
116
116
def length = len
117
117
def apply (idx : Int ) =
118
118
if (idx < len) self(idx)
119
119
else throw new IndexOutOfBoundsException (idx.toString)
120
120
}
121
121
122
- trait DroppedWhile extends super .DroppedWhile with Transformed [A ] {
122
+ trait DroppedWhileS extends super .DroppedWhileI with TransformedS [A ] {
123
123
protected [this ] lazy val start = self prefixLength pred
124
124
def length = self.length - start
125
125
def apply (idx : Int ) =
126
126
if (idx >= 0 ) self(idx + start)
127
127
else throw new IndexOutOfBoundsException (idx.toString)
128
128
}
129
129
130
- trait Zipped [B ] extends super .Zipped [B ] with Transformed [(A , B )] {
130
+ trait ZippedS [B ] extends super .ZippedI [B ] with TransformedS [(A , B )] {
131
131
protected [this ] lazy val thatSeq = other.seq.toSeq
132
132
/* Have to be careful here - other may be an infinite sequence. */
133
133
def length = if ((thatSeq lengthCompare self.length) <= 0 ) thatSeq.length else self.length
134
134
def apply (idx : Int ) = (self.apply(idx), thatSeq.apply(idx))
135
135
}
136
136
137
- trait ZippedAll [A1 >: A , B ] extends super .ZippedAll [A1 , B ] with Transformed [(A1 , B )] {
137
+ trait ZippedAllS [A1 >: A , B ] extends super .ZippedAllI [A1 , B ] with TransformedS [(A1 , B )] {
138
138
protected [this ] lazy val thatSeq = other.seq.toSeq
139
139
def length : Int = self.length max thatSeq.length
140
140
def apply (idx : Int ) =
141
141
(if (idx < self.length) self.apply(idx) else thisElem,
142
142
if (idx < thatSeq.length) thatSeq.apply(idx) else thatElem)
143
143
}
144
144
145
- trait Reversed extends Transformed [A ] {
145
+ trait ReversedS extends TransformedS [A ] {
146
146
override def iterator : Iterator [A ] = createReversedIterator
147
147
def length : Int = self.length
148
148
def apply (idx : Int ): A = self.apply(length - 1 - idx)
@@ -158,7 +158,7 @@ trait SeqViewLike[+A,
158
158
// Note--for this to work, must ensure 0 <= from and 0 <= replaced
159
159
// Must also take care to allow patching inside an infinite stream
160
160
// (patching in an infinite stream is not okay)
161
- trait Patched [B >: A ] extends Transformed [B ] {
161
+ trait PatchedS [B >: A ] extends TransformedS [B ] {
162
162
protected [this ] val from : Int
163
163
protected [this ] val patch : GenSeq [B ]
164
164
protected [this ] val replaced : Int
@@ -179,7 +179,7 @@ trait SeqViewLike[+A,
179
179
final override protected [this ] def viewIdentifier = " P"
180
180
}
181
181
182
- trait Prepended [B >: A ] extends Transformed [B ] {
182
+ trait PrependedS [B >: A ] extends TransformedS [B ] {
183
183
protected [this ] val fst : B
184
184
override def iterator : Iterator [B ] = Iterator .single(fst) ++ self.iterator
185
185
def length : Int = 1 + self.length
@@ -192,31 +192,32 @@ trait SeqViewLike[+A,
192
192
/** Boilerplate method, to override in each subclass
193
193
* This method could be eliminated if Scala had virtual classes
194
194
*/
195
- protected override def newForced [B ](xs : => GenSeq [B ]): Transformed [B ] = new { val forced = xs } with AbstractTransformed [B ] with Forced [B ]
196
- protected override def newAppended [B >: A ](that : GenTraversable [B ]): Transformed [B ] = new { val rest = that } with AbstractTransformed [B ] with Appended [B ]
197
- protected override def newMapped [B ](f : A => B ): Transformed [B ] = new { val mapping = f } with AbstractTransformed [B ] with Mapped [B ]
198
- protected override def newFlatMapped [B ](f : A => GenTraversableOnce [B ]): Transformed [B ] = new { val mapping = f } with AbstractTransformed [B ] with FlatMapped [B ]
199
- protected override def newFiltered (p : A => Boolean ): Transformed [A ] = new { val pred = p } with AbstractTransformed [A ] with Filtered
200
- protected override def newSliced (_endpoints : SliceInterval ): Transformed [A ] = new { val endpoints = _endpoints } with AbstractTransformed [A ] with Sliced
201
- protected override def newDroppedWhile (p : A => Boolean ): Transformed [A ] = new { val pred = p } with AbstractTransformed [A ] with DroppedWhile
202
- protected override def newTakenWhile (p : A => Boolean ): Transformed [A ] = new { val pred = p } with AbstractTransformed [A ] with TakenWhile
203
- protected override def newZipped [B ](that : GenIterable [B ]): Transformed [(A , B )] = new { val other = that } with AbstractTransformed [(A , B )] with Zipped [B ]
204
- protected override def newZippedAll [A1 >: A , B ](that : GenIterable [B ], _thisElem : A1 , _thatElem : B ): Transformed [(A1 , B )] = new {
205
- val other = that
206
- val thisElem = _thisElem
207
- val thatElem = _thatElem
208
- } with AbstractTransformed [(A1 , B )] with ZippedAll [A1 , B ]
209
- protected def newReversed : Transformed [A ] = new AbstractTransformed [A ] with Reversed
210
- protected def newPatched [B >: A ](_from : Int , _patch : GenSeq [B ], _replaced : Int ): Transformed [B ] = new {
211
- val from = _from
212
- val patch = _patch
213
- val replaced = _replaced
214
- } with AbstractTransformed [B ] with Patched [B ]
215
- protected def newPrepended [B >: A ](elem : B ): Transformed [B ] = new { protected [this ] val fst = elem } with AbstractTransformed [B ] with Prepended [B ]
195
+ protected override def newForced [B ](xs : => GenSeq [B ]): TransformedS [B ] = new AbstractTransformedS [B ] with ForcedS [B ] { lazy val forced = xs }
196
+ protected override def newAppended [B >: A ](that : GenTraversable [B ]): TransformedS [B ] = new AbstractTransformedS [B ] with AppendedS [B ] { lazy val rest = that }
197
+ protected override def newMapped [B ](f : A => B ): TransformedS [B ] = new AbstractTransformedS [B ] with MappedS [B ] { lazy val mapping = f }
198
+ protected override def newFlatMapped [B ](f : A => GenTraversableOnce [B ]): TransformedS [B ] = new AbstractTransformedS [B ] with FlatMappedS [B ] { lazy val mapping = f }
199
+ protected override def newFiltered (p : A => Boolean ): TransformedS [A ] = new AbstractTransformedS [A ] with FilteredS { lazy val pred = p }
200
+ protected override def newSliced (_endpoints : SliceInterval ): TransformedS [A ] = new AbstractTransformedS [A ] with SlicedS { lazy val endpoints = _endpoints }
201
+ protected override def newDroppedWhile (p : A => Boolean ): TransformedS [A ] = new AbstractTransformedS [A ] with DroppedWhileS { lazy val pred = p }
202
+ protected override def newTakenWhile (p : A => Boolean ): TransformedS [A ] = new AbstractTransformedS [A ] with TakenWhileS { lazy val pred = p }
203
+ protected override def newZipped [B ](that : GenIterable [B ]): TransformedS [(A , B )] = new AbstractTransformedS [(A , B )] with ZippedS [B ] { lazy val other = that }
204
+ protected override def newZippedAll [A1 >: A , B ](that : GenIterable [B ], _thisElem : A1 , _thatElem : B ): TransformedS [(A1 , B )] = new AbstractTransformedS [(A1 , B )] with ZippedAllS [A1 , B ] {
205
+ lazy val other = that
206
+ lazy val thisElem = _thisElem
207
+ lazy val thatElem = _thatElem
208
+ }
209
+ protected def newReversed : TransformedS [A ] = new AbstractTransformedS [A ] with ReversedS
210
+ protected def newPatched [B >: A ](_from : Int , _patch : GenSeq [B ], _replaced : Int ): TransformedS [B ] = new AbstractTransformedS [B ] with PatchedS [B ] {
211
+ lazy val from = _from
212
+ lazy val patch = _patch
213
+ lazy val replaced = _replaced
214
+ }
215
+
216
+ protected def newPrepended [B >: A ](elem : B ): TransformedS [B ] = new AbstractTransformedS [B ] with PrependedS [B ] { lazy protected [this ] val fst = elem }
216
217
217
218
// see comment in IterableViewLike.
218
- protected override def newTaken (n : Int ): Transformed [A ] = newSliced(SliceInterval (0 , n))
219
- protected override def newDropped (n : Int ): Transformed [A ] = newSliced(SliceInterval (n, Int .MaxValue ))
219
+ protected override def newTaken (n : Int ): TransformedS [A ] = newSliced(SliceInterval (0 , n))
220
+ protected override def newDropped (n : Int ): TransformedS [A ] = newSliced(SliceInterval (n, Int .MaxValue ))
220
221
221
222
override def reverse : This = newReversed.asInstanceOf [This ]
222
223
0 commit comments