Skip to content

Commit b052e8b

Browse files
committed
Add implicit conversion from IArray to immutable.ArraySeq
1 parent 9a6af34 commit b052e8b

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

library/src/scala/IArray.scala

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,50 @@ object opaques:
270270
extension [T](arr: IArray[T]) def zip[U: ClassTag](that: IArray[U]): IArray[(T, U)] =
271271
genericArrayOps(arr).zip(that)
272272

273+
/** Conversion from IArray to immutable.ArraySeq */
274+
given genericWrapIArray[T](using DummyImplicit): Conversion[IArray[T], scala.collection.immutable.ArraySeq[T]] =
275+
arr => scala.collection.immutable.ArraySeq.unsafeWrapArray(arr.asInstanceOf[Array[T]])
276+
277+
/** Conversion from IArray to immutable.ArraySeq */
278+
given genericWrapAnyRefIArray[T <: AnyRef](using DummyImplicit): Conversion[IArray[T], scala.collection.immutable.ArraySeq[T]] =
279+
arr => scala.collection.immutable.ArraySeq.ofRef(arr.asInstanceOf[Array[T]])
280+
281+
/** Conversion from IArray to immutable.ArraySeq */
282+
given genericWrapIntIArray(using DummyImplicit): Conversion[IArray[Int], scala.collection.immutable.ArraySeq[Int]] =
283+
arr => scala.collection.immutable.ArraySeq.ofInt(arr.asInstanceOf[Array[Int]])
284+
285+
/** Conversion from IArray to immutable.ArraySeq */
286+
given genericWrapDoubleIArray(using DummyImplicit): Conversion[IArray[Double], scala.collection.immutable.ArraySeq[Double]] =
287+
arr => scala.collection.immutable.ArraySeq.ofDouble(arr.asInstanceOf[Array[Double]])
288+
289+
/** Conversion from IArray to immutable.ArraySeq */
290+
given genericWrapLongIArray(using DummyImplicit): Conversion[IArray[Long], scala.collection.immutable.ArraySeq[Long]] =
291+
arr => scala.collection.immutable.ArraySeq.ofLong(arr.asInstanceOf[Array[Long]])
292+
293+
/** Conversion from IArray to immutable.ArraySeq */
294+
given genericWrapFloatIArray(using DummyImplicit): Conversion[IArray[Float], scala.collection.immutable.ArraySeq[Float]] =
295+
arr => scala.collection.immutable.ArraySeq.ofFloat(arr.asInstanceOf[Array[Float]])
296+
297+
/** Conversion from IArray to immutable.ArraySeq */
298+
given genericWrapCharIArray(using DummyImplicit): Conversion[IArray[Char], scala.collection.immutable.ArraySeq[Char]] =
299+
arr => scala.collection.immutable.ArraySeq.ofChar(arr.asInstanceOf[Array[Char]])
300+
301+
/** Conversion from IArray to immutable.ArraySeq */
302+
given genericWrapByteIArray(using DummyImplicit): Conversion[IArray[Byte], scala.collection.immutable.ArraySeq[Byte]] =
303+
arr => scala.collection.immutable.ArraySeq.ofByte(arr.asInstanceOf[Array[Byte]])
304+
305+
/** Conversion from IArray to immutable.ArraySeq */
306+
given genericWrapShortIArray(using DummyImplicit): Conversion[IArray[Short], scala.collection.immutable.ArraySeq[Short]] =
307+
arr => scala.collection.immutable.ArraySeq.ofShort(arr.asInstanceOf[Array[Short]])
308+
309+
/** Conversion from IArray to immutable.ArraySeq */
310+
given genericWrapBooleanIArray(using DummyImplicit): Conversion[IArray[Boolean], scala.collection.immutable.ArraySeq[Boolean]] =
311+
arr => scala.collection.immutable.ArraySeq.ofBoolean(arr.asInstanceOf[Array[Boolean]])
312+
313+
/** Conversion from IArray to immutable.ArraySeq */
314+
given genericWrapUnitIArray(using DummyImplicit): Conversion[IArray[Unit], scala.collection.immutable.ArraySeq[Unit]] =
315+
arr => scala.collection.immutable.ArraySeq.ofUnit(arr.asInstanceOf[Array[Unit]])
316+
273317
end opaques
274318

275319
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).toList
3+
IArray(2, 1, 3).toSeq
4+
IArray(2, 1, 3).updated(1, 2)
5+
IArray(2, 1, 3).updated(1, "a")
6+
IArray(2, 1, 3).sorted
7+
IArray(2, 1, 3).appended("b")
8+
IArray(2, 1, 3).prepended("b")
9+
IArray(2, 1, 3).appendedAll(IArray(4,5, "a"))
10+
IArray(2, 1, 3).prependedAll(IArray(4,5, "a"))
11+
val x1: Seq[Int] = Array(1, 2)
12+
val x2: Seq[Int] = IArray(1, 2)

0 commit comments

Comments
 (0)