Skip to content

Commit a9ba00e

Browse files
author
Antoine Brunner
committed
Add all common methods of Scala2's ArrayOps to the IArray extension methods
1 parent d21d32e commit a9ba00e

File tree

1 file changed

+153
-1
lines changed

1 file changed

+153
-1
lines changed

library/src/scala/runtime/DynamicTuple.scala

Lines changed: 153 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,160 @@ import scala.reflect.ClassTag
66
object DynamicTuple {
77

88
given iarrayOps: [T](arr: IArray[T]) {
9+
def ++[U >: T: ClassTag](that: IArray[U]): IArray[U] =
10+
(arr.asInstanceOf[Array[T]] ++ that.asInstanceOf[Array[U]]).asInstanceOf
11+
12+
def contains(elem: T): Boolean =
13+
arr.asInstanceOf[Array[T]].contains(elem)
14+
15+
def count(p: T => Boolean): Int =
16+
arr.asInstanceOf[Array[T]].count(p)
17+
18+
def drop(n: Int): IArray[T] =
19+
arr.asInstanceOf[Array[T]].drop(n).asInstanceOf
20+
21+
def dropRight(n: Int): IArray[T] =
22+
arr.asInstanceOf[Array[T]].dropRight(n).asInstanceOf
23+
24+
def dropWhile(p: T => Boolean): IArray[T] =
25+
arr.asInstanceOf[Array[T]].dropWhile(p).asInstanceOf
26+
27+
def exists(p: T => Boolean): IArray[T] =
28+
arr.asInstanceOf[Array[T]].exists(p).asInstanceOf
29+
30+
def filter(p: T => Boolean): IArray[T] =
31+
arr.asInstanceOf[Array[T]].filter(p).asInstanceOf
32+
33+
def filterNot(p: T => Boolean): IArray[T] =
34+
arr.asInstanceOf[Array[T]].filterNot(p).asInstanceOf
35+
36+
def find(p: T => Boolean): Option[T] =
37+
arr.asInstanceOf[Array[T]].find(p).asInstanceOf
38+
39+
def flatMap[U: ClassTag](f: T => IterableOnce[U]): IArray[U] =
40+
arr.asInstanceOf[Array[T]].flatMap(f).asInstanceOf
41+
42+
def flatten[U: ClassTag](given T => Iterable[U]): IArray[U] =
43+
arr.asInstanceOf[Array[T]].flatten.asInstanceOf
44+
45+
def fold[U >: T: ClassTag](z: U)(op: (U, U) => U): U =
46+
arr.asInstanceOf[Array[T]].fold(z)(op).asInstanceOf
47+
48+
def foldLeft[U >: T: ClassTag](z: U)(op: (U, T) => U): U =
49+
arr.asInstanceOf[Array[T]].foldLeft(z)(op).asInstanceOf
50+
51+
def foldRight[U >: T: ClassTag](z: U)(op: (T, U) => U): U =
52+
arr.asInstanceOf[Array[T]].foldRight(z)(op).asInstanceOf
53+
54+
def forall(p: T => Boolean): Boolean =
55+
arr.asInstanceOf[Array[T]].forall(p)
56+
57+
def foreach[U](f: T => U): Unit =
58+
arr.asInstanceOf[Array[T]].foreach(f)
59+
60+
def head: T =
61+
arr.asInstanceOf[Array[T]].head
62+
63+
def headOption: Option[T] =
64+
arr.asInstanceOf[Array[T]].headOption
65+
66+
def indexOf(elem: T, from: Int = 0): Int =
67+
arr.asInstanceOf[Array[T]].indexOf(elem, from)
68+
69+
def indexWhere(p: T => Boolean, from: Int = 0): Int =
70+
arr.asInstanceOf[Array[T]].indexWhere(p, from)
71+
72+
def indices: Range =
73+
arr.asInstanceOf[Array[T]].indices.asInstanceOf
74+
75+
def init: IArray[T] =
76+
arr.asInstanceOf[Array[T]].init.asInstanceOf
77+
78+
def isEmpty: Boolean =
79+
arr.asInstanceOf[Array[T]].isEmpty
80+
81+
def iterator: Iterator[T] =
82+
arr.asInstanceOf[Array[T]].iterator
83+
84+
def last: T =
85+
arr.asInstanceOf[Array[T]].last
86+
87+
def lastOption: Option[T] =
88+
arr.asInstanceOf[Array[T]].lastOption
89+
90+
def lastIndexOf(elem: T, from: Int = 0): Int =
91+
arr.asInstanceOf[Array[T]].lastIndexOf(elem, from)
92+
93+
def lastIndexWhere(p: T => Boolean, from: Int = 0): Int =
94+
arr.asInstanceOf[Array[T]].lastIndexWhere(p, from)
95+
996
def map[U: ClassTag](f: T => U): IArray[U] =
10-
arr.asInstanceOf[Array[T]].map(f).asInstanceOf[IArray[U]]
97+
arr.asInstanceOf[Array[T]].map(f).asInstanceOf
98+
99+
def nonEmpty: Boolean =
100+
arr.asInstanceOf[Array[T]].nonEmpty
101+
102+
def partition(p: T => Boolean): (IArray[T], IArray[T]) = arr.asInstanceOf[Array[T]].partition(p) match {
103+
case (x, y) => (x.asInstanceOf[IArray[T]], y.asInstanceOf[IArray[T]])
104+
}
105+
106+
def reverse: IArray[T] =
107+
arr.asInstanceOf[Array[T]].reverse.asInstanceOf
108+
109+
def scan[U >: T: ClassTag](z: U)(op: (U, U) => U): Array[U] =
110+
arr.asInstanceOf[Array[T]].scan(z)(op).asInstanceOf
111+
112+
def scanLeft[U: ClassTag](z: U)(op: (U, T) => U): Array[U] =
113+
arr.asInstanceOf[Array[T]].scanLeft(z)(op).asInstanceOf
114+
115+
def scanRight[U: ClassTag](z: U)(op: (T, U) => U): Array[U] =
116+
arr.asInstanceOf[Array[T]].scanRight(z)(op).asInstanceOf
117+
118+
def size: Int =
119+
arr.asInstanceOf[Array[T]].size
120+
121+
def slice(from: Int, until: Int): Array[T] =
122+
arr.asInstanceOf[Array[T]].slice(from, until).asInstanceOf
123+
124+
def sortBy[U: ClassTag](f: T => U)(given math.Ordering[U]): IArray[T] =
125+
arr.asInstanceOf[Array[T]].sortBy(f).asInstanceOf
126+
127+
def sortWith(f: (T, T) => Boolean): IArray[T] =
128+
arr.asInstanceOf[Array[T]].sortWith(f).asInstanceOf
129+
130+
def sorted(given math.Ordering[T]): IArray[T] =
131+
arr.asInstanceOf[Array[T]].sorted.asInstanceOf
132+
133+
def span(p: T => Boolean): (IArray[T], IArray[T]) = arr.asInstanceOf[Array[T]].span(p) match {
134+
case (x, y) => (x.asInstanceOf[IArray[T]], y.asInstanceOf[IArray[T]])
135+
}
136+
137+
def splitAt(n: Int): (IArray[T], IArray[T]) = arr.asInstanceOf[Array[T]].splitAt(n) match {
138+
case (x, y) => (x.asInstanceOf[IArray[T]], y.asInstanceOf[IArray[T]])
139+
}
140+
141+
def startsWith[U >: T: ClassTag](that: IArray[U], offset: Int = 0): Boolean =
142+
arr.asInstanceOf[Array[T]].startsWith(that.asInstanceOf[Array[U]])
143+
144+
def tail: IArray[T] =
145+
arr.asInstanceOf[Array[T]].tail.asInstanceOf
146+
147+
def take(n: Int): IArray[T] =
148+
arr.asInstanceOf[Array[T]].take(n).asInstanceOf
149+
150+
def takeRight(n: Int): IArray[T] =
151+
arr.asInstanceOf[Array[T]].takeRight(n).asInstanceOf
152+
153+
def takeWhile(p: T => Boolean): IArray[T] =
154+
arr.asInstanceOf[Array[T]].takeWhile(p).asInstanceOf
155+
156+
def unzip[U: ClassTag, V: ClassTag](given T => (U, V)): (IArray[U], IArray[V]) =
157+
arr.asInstanceOf[Array[T]].unzip(asPair, ct1, ct2) match {
158+
case (x, y) => (x.asInstanceOf[IArray[U]], y.asInstanceOf[IArray[V]])
159+
}
160+
161+
def zip[U: ClassTag](that: IterableOnce[U]): IArray[(T, U)] =
162+
arr.asInstanceOf[Array[T]].zip(that).asInstanceOf
11163
}
12164

13165
inline val MaxSpecialized = 22

0 commit comments

Comments
 (0)