Skip to content

Commit 0a835cf

Browse files
committed
Add IArray.toSeq
1 parent 9a6af34 commit 0a835cf

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

library/src/scala/IArray.scala

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package scala
22
import reflect.ClassTag
33

4+
import scala.collection.immutable
5+
46
/** An immutable array. An `IArray[T]` has the same representation as an `Array[T]`,
57
* but it cannot be updated. Unlike regular arrays, immutable arrays are covariant.
68
*/
@@ -270,6 +272,50 @@ object opaques:
270272
extension [T](arr: IArray[T]) def zip[U: ClassTag](that: IArray[U]): IArray[(T, U)] =
271273
genericArrayOps(arr).zip(that)
272274

275+
/** Conversion from IArray to immutable.ArraySeq */
276+
extension [T](arr: IArray[T]) def toSeq: immutable.ArraySeq[T] =
277+
immutable.ArraySeq.unsafeWrapArray(arr.asInstanceOf[Array[T]])
278+
279+
/** Conversion from IArray to immutable.ArraySeq */
280+
extension [T <: AnyRef](arr: IArray[T]) def toSeq: immutable.ArraySeq[T] =
281+
immutable.ArraySeq.ofRef(arr.asInstanceOf[Array[T]])
282+
283+
/** Conversion from IArray to immutable.ArraySeq */
284+
extension (arr: IArray[Int]) def toSeq: immutable.ArraySeq[Int] =
285+
immutable.ArraySeq.ofInt(arr.asInstanceOf[Array[Int]])
286+
287+
/** Conversion from IArray to immutable.ArraySeq */
288+
extension (arr: IArray[Double]) def toSeq: immutable.ArraySeq[Double] =
289+
immutable.ArraySeq.ofDouble(arr.asInstanceOf[Array[Double]])
290+
291+
/** Conversion from IArray to immutable.ArraySeq */
292+
extension (arr: IArray[Long]) def toSeq: immutable.ArraySeq[Long] =
293+
immutable.ArraySeq.ofLong(arr.asInstanceOf[Array[Long]])
294+
295+
/** Conversion from IArray to immutable.ArraySeq */
296+
extension (arr: IArray[Float]) def toSeq: immutable.ArraySeq[Float] =
297+
immutable.ArraySeq.ofFloat(arr.asInstanceOf[Array[Float]])
298+
299+
/** Conversion from IArray to immutable.ArraySeq */
300+
extension (arr: IArray[Char]) def toSeq: immutable.ArraySeq[Char] =
301+
immutable.ArraySeq.ofChar(arr.asInstanceOf[Array[Char]])
302+
303+
/** Conversion from IArray to immutable.ArraySeq */
304+
extension (arr: IArray[Byte]) def toSeq: immutable.ArraySeq[Byte] =
305+
immutable.ArraySeq.ofByte(arr.asInstanceOf[Array[Byte]])
306+
307+
/** Conversion from IArray to immutable.ArraySeq */
308+
extension (arr: IArray[Short]) def toSeq: immutable.ArraySeq[Short] =
309+
immutable.ArraySeq.ofShort(arr.asInstanceOf[Array[Short]])
310+
311+
/** Conversion from IArray to immutable.ArraySeq */
312+
extension (arr: IArray[Boolean]) def toSeq: immutable.ArraySeq[Boolean] =
313+
immutable.ArraySeq.ofBoolean(arr.asInstanceOf[Array[Boolean]])
314+
315+
/** Conversion from IArray to immutable.ArraySeq */
316+
extension (arr: IArray[Unit]) def toSeq: immutable.ArraySeq[Unit] =
317+
immutable.ArraySeq.ofUnit(arr.asInstanceOf[Array[Unit]])
318+
273319
end opaques
274320

275321
type IArray[+T] = opaques.IArray[T]

tests/pos/IArrayToArraySeq.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
def test: Unit =
2+
IArray(2, 1, 3).toSeq
3+
IArray(2, 1, 3).toSeq.toList
4+
IArray(2, 1, 3).toSeq.updated(1, 2)
5+
IArray(2, 1, 3).toSeq.updated(1, "a")
6+
IArray(2, 1, 3).toSeq.sorted
7+
IArray(2, 1, 3).toSeq.appended("b")
8+
IArray(2, 1, 3).toSeq.prepended("b")
9+
IArray(2, 1, 3).toSeq.appendedAll(IArray(4,5, "a").toSeq)
10+
IArray(2, 1, 3).toSeq.prependedAll(IArray(4,5, "a").toSeq)
11+
val x1: Seq[Int] = Array(1, 2).toSeq
12+
val x2: Seq[Int] = IArray(1, 2).toSeq

0 commit comments

Comments
 (0)