@@ -60,16 +60,16 @@ class Lst[+T](val elems: Any) extends AnyVal {
60
60
}
61
61
62
62
/** `f` is pulled out, not duplicated */
63
- @ inline def map [U ](@ inline f : T => U ): Lst [U ] = {
63
+ inline def map [U ](inline f : T => U ): Lst [U ] = {
64
64
def op (x : T ) = f(x)
65
65
elems match {
66
66
case null => Empty
67
67
case elems : Array [Any ] => def elem (i : Int ) = elems(i).asInstanceOf [T ]
68
68
val newElems = new Array [Any ](elems.length)
69
69
var i = 0
70
70
while (i < elems.length) { newElems(i) = op(elem(i)); i += 1 }
71
- new Lst (newElems)
72
- case elem : T @ unchecked => new Lst (op(elem))
71
+ new Lst [ U ] (newElems)
72
+ case elem : T @ unchecked => new Lst [ U ] (op(elem))
73
73
}
74
74
}
75
75
@@ -89,8 +89,8 @@ class Lst[+T](val elems: Any) extends AnyVal {
89
89
}
90
90
i += 1
91
91
}
92
- if (newElems == null ) this .asInstanceOf [Lst [U ]] else new Lst (newElems)
93
- case elem : T @ unchecked => new Lst (f(elem))
92
+ if (newElems == null ) this .asInstanceOf [Lst [U ]] else new Lst [ U ] (newElems)
93
+ case elem : T @ unchecked => new Lst [ U ] (f(elem))
94
94
}
95
95
96
96
def flatMap [U ](f : T => Lst [U ]): Lst [U ] = elems match {
@@ -109,21 +109,21 @@ class Lst[+T](val elems: Any) extends AnyVal {
109
109
else if (len == 1 ) {
110
110
i = 0
111
111
while (newElemss(i) == null ) i += 1
112
- new Lst (newElemss(i))
112
+ new Lst [ U ] (newElemss(i))
113
113
}
114
114
else {
115
115
val newElems = new Array [Any ](len)
116
116
i = 0
117
117
var j = 0
118
118
while (i < newElemss.length) {
119
- val ys = new Lst (newElemss(i))
119
+ val ys = new Lst [ U ] (newElemss(i))
120
120
ys.copyToArray(newElems, j)
121
121
j += ys.length
122
122
i += 1
123
123
}
124
- new Lst (newElems)
124
+ new Lst [ U ] (newElems)
125
125
}
126
- case elem : T @ unchecked => new Lst (f(elem).elems)
126
+ case elem : T @ unchecked => new Lst [ U ] (f(elem).elems)
127
127
}
128
128
129
129
def filter (p : T => Boolean ): Lst [T ] = elems match {
@@ -214,7 +214,7 @@ class Lst[+T](val elems: Any) extends AnyVal {
214
214
newElems(elems.length - 1 - i) = elem(i)
215
215
i += 1
216
216
}
217
- new Lst (newElems)
217
+ new Lst [ T ] (newElems)
218
218
case _ => this
219
219
}
220
220
@@ -252,7 +252,7 @@ class Lst[+T](val elems: Any) extends AnyVal {
252
252
val newElems = new Array [Any ](len1 + len2)
253
253
this .copyToArray(newElems, 0 )
254
254
that.copyToArray(newElems, len1)
255
- new Lst (newElems)
255
+ new Lst [ U ] (newElems)
256
256
}
257
257
258
258
def zipWith [U , V ](that : Lst [U ])(op : (T , U ) => V ): Lst [V ] =
@@ -264,7 +264,7 @@ class Lst[+T](val elems: Any) extends AnyVal {
264
264
case elems2 : Array [Any ] => def elem2 (i : Int ) = elems2(i).asInstanceOf [U ]
265
265
val len = elems1.length min elems2.length
266
266
if (len == 0 ) Empty
267
- else if (len == 1 ) new Lst (op(elem1(0 ), elem2(0 )))
267
+ else if (len == 1 ) new Lst [ V ] (op(elem1(0 ), elem2(0 )))
268
268
else {
269
269
var newElems : Array [Any ] = null
270
270
var i = 0
@@ -279,17 +279,17 @@ class Lst[+T](val elems: Any) extends AnyVal {
279
279
}
280
280
i += 1
281
281
}
282
- new Lst (newElems)
282
+ new Lst [ V ] (newElems)
283
283
}
284
284
case elem2 : U @ unchecked =>
285
- new Lst (op(elem1(0 ), elem2))
285
+ new Lst [ V ] (op(elem1(0 ), elem2))
286
286
}
287
287
case elem1 : T @ unchecked =>
288
288
that.elems match {
289
289
case null => Empty
290
290
case elems2 : Array [Any ] => def elem2 (i : Int ) = elems2(i).asInstanceOf [U ]
291
- new Lst (op(elem1, elem2(0 )))
292
- case elem2 : U @ unchecked => new Lst (op(elem1, elem2))
291
+ new Lst [ V ] (op(elem1, elem2(0 )))
292
+ case elem2 : U @ unchecked => new Lst [ V ] (op(elem1, elem2))
293
293
}
294
294
}
295
295
@@ -301,9 +301,9 @@ class Lst[+T](val elems: Any) extends AnyVal {
301
301
val newElems = new Array [Any ](elems.length)
302
302
var i = 0
303
303
while (i < elems.length) { newElems(i) = (elem(i), i); i += 1 }
304
- new Lst (newElems)
304
+ new Lst [( T , Int )] (newElems)
305
305
case elem : T @ unchecked =>
306
- new Lst ((elem, 0 ))
306
+ new Lst [( T , Int )] ((elem, 0 ))
307
307
}
308
308
309
309
def corresponds [U ](that : Lst [U ])(p : (T , U ) => Boolean ): Boolean =
@@ -377,25 +377,25 @@ object Lst {
377
377
private def eq (x : Any , y : Any ) = x.asInstanceOf [AnyRef ] `eq` y.asInstanceOf [AnyRef ]
378
378
private val eqFn = (x : Any , y : Any ) => eq(x, y)
379
379
380
- val Empty = new Lst (null )
380
+ val Empty = new Lst [ Nothing ] (null )
381
381
382
382
def apply [T ](): Lst [T ] = Empty
383
383
384
- def apply [T ](x0 : T ): Lst [T ] = new Lst (x0)
384
+ def apply [T ](x0 : T ): Lst [T ] = new Lst [ T ] (x0)
385
385
386
386
def apply [T ](x0 : T , x1 : T ): Lst [T ] = {
387
387
val elems = new Arr (2 )
388
388
elems(0 ) = x0
389
389
elems(1 ) = x1
390
- new Lst (elems)
390
+ new Lst [ T ] (elems)
391
391
}
392
392
393
393
def apply [T ](x0 : T , x1 : T , x2 : T ): Lst [T ] = {
394
394
val elems = new Arr (3 )
395
395
elems(0 ) = x0
396
396
elems(1 ) = x1
397
397
elems(2 ) = x2
398
- new Lst (elems)
398
+ new Lst [ T ] (elems)
399
399
}
400
400
401
401
def apply [T ](x0 : T , x1 : T , x2 : T , x3 : T ): Lst [T ] = {
@@ -404,7 +404,7 @@ object Lst {
404
404
elems(1 ) = x1
405
405
elems(2 ) = x2
406
406
elems(3 ) = x3
407
- new Lst (elems)
407
+ new Lst [ T ] (elems)
408
408
}
409
409
410
410
def apply [T ](x0 : T , x1 : T , x2 : T , x3 : T , x4 : T , xs : T * ): Lst [T ] = {
@@ -415,14 +415,14 @@ object Lst {
415
415
elems(3 ) = x3
416
416
elems(4 ) = x4
417
417
xs.copyToArray(elems, 5 )
418
- new Lst (elems)
418
+ new Lst [ T ] (elems)
419
419
}
420
420
421
421
def fill [T ](n : Int )(elem : => T ) = {
422
422
val elems = new Arr (n)
423
423
var i = 0
424
424
while (i < n) { elems(i) = elem; i += 1 }
425
- new Lst (elems)
425
+ new Lst [ T ] (elems)
426
426
}
427
427
428
428
class Buffer [T ] {
@@ -471,7 +471,7 @@ object Lst {
471
471
472
472
def toLst : Lst [T ] =
473
473
if (len == 0 ) Empty
474
- else if (len == 1 ) new Lst (elem)
474
+ else if (len == 1 ) new Lst [ T ] (elem)
475
475
else _fromArray(elems, 0 , len)
476
476
477
477
def clear () =
@@ -481,12 +481,12 @@ object Lst {
481
481
private def _fromArray [T ](elems : Arr , start : Int , end : Int ): Lst [T ] = {
482
482
val len = end - start
483
483
if (len <= 0 ) Empty
484
- else if (len == 1 ) new Lst (elems(start))
485
- else if (start == 0 && end == elems.length) new Lst (elems)
484
+ else if (len == 1 ) new Lst [ T ] (elems(start))
485
+ else if (start == 0 && end == elems.length) new Lst [ T ] (elems)
486
486
else {
487
487
val newElems = new Arr (len)
488
488
System .arraycopy(elems, start, newElems, 0 , len)
489
- new Lst (newElems)
489
+ new Lst [ T ] (newElems)
490
490
}
491
491
}
492
492
0 commit comments