Skip to content

Commit e47663c

Browse files
author
Antoine Brunner
committed
Made IArray extension methods compile
1 parent 777636f commit e47663c

File tree

1 file changed

+160
-164
lines changed

1 file changed

+160
-164
lines changed

library/src-bootstrapped/scala/IArray.scala

Lines changed: 160 additions & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,166 @@ object opaques
3838
def (arr: IArray[Double]) length: Int = arr.asInstanceOf[Array[Double]].length
3939
def (arr: IArray[Object]) length: Int = arr.asInstanceOf[Array[Object]].length
4040
def [T](arr: IArray[T]) length: Int = arr.asInstanceOf[Array[T]].length
41+
42+
/** All the methods on Array[T] that don't mutate in-place can be used with IArray[T].
43+
*/
44+
def [T, U >: T: ClassTag](arr: IArray[T]) ++(that: IArray[U]): IArray[U] =
45+
(arr.asInstanceOf[Array[T]] ++ that.asInstanceOf[Array[U]]).asInstanceOf
46+
47+
def [T](arr: IArray[T])contains(elem: T): Boolean =
48+
arr.asInstanceOf[Array[T]].contains(elem)
49+
50+
def [T](arr: IArray[T]) count(p: T => Boolean): Int =
51+
arr.asInstanceOf[Array[T]].count(p)
52+
53+
def [T](arr: IArray[T]) drop(n: Int): IArray[T] =
54+
arr.asInstanceOf[Array[T]].drop(n).asInstanceOf
55+
56+
def [T](arr: IArray[T]) dropRight(n: Int): IArray[T] =
57+
arr.asInstanceOf[Array[T]].dropRight(n).asInstanceOf
58+
59+
def [T](arr: IArray[T]) dropWhile(p: T => Boolean): IArray[T] =
60+
arr.asInstanceOf[Array[T]].dropWhile(p).asInstanceOf
61+
62+
def [T](arr: IArray[T]) exists(p: T => Boolean): IArray[T] =
63+
arr.asInstanceOf[Array[T]].exists(p).asInstanceOf
64+
65+
def [T](arr: IArray[T]) filter(p: T => Boolean): IArray[T] =
66+
arr.asInstanceOf[Array[T]].filter(p).asInstanceOf
67+
68+
def [T](arr: IArray[T]) filterNot(p: T => Boolean): IArray[T] =
69+
arr.asInstanceOf[Array[T]].filterNot(p).asInstanceOf
70+
71+
def [T](arr: IArray[T]) find(p: T => Boolean): Option[T] =
72+
arr.asInstanceOf[Array[T]].find(p).asInstanceOf
73+
74+
def [T, U: ClassTag](arr: IArray[T]) flatMap(f: T => IterableOnce[U]): IArray[U] =
75+
arr.asInstanceOf[Array[T]].flatMap(f).asInstanceOf
76+
77+
def [T, U: ClassTag](arr: IArray[T]) flatten(given T => Iterable[U]): IArray[U] =
78+
arr.asInstanceOf[Array[T]].flatten.asInstanceOf
79+
80+
def [T, U >: T: ClassTag](arr: IArray[T]) fold(z: U)(op: (U, U) => U): U =
81+
arr.asInstanceOf[Array[T]].fold(z)(op).asInstanceOf
82+
83+
def [T, U >: T: ClassTag](arr: IArray[T]) foldLeft(z: U)(op: (U, T) => U): U =
84+
arr.asInstanceOf[Array[T]].foldLeft(z)(op).asInstanceOf
85+
86+
def [T, U >: T: ClassTag](arr: IArray[T]) foldRight(z: U)(op: (T, U) => U): U =
87+
arr.asInstanceOf[Array[T]].foldRight(z)(op).asInstanceOf
88+
89+
def [T](arr: IArray[T]) forall(p: T => Boolean): Boolean =
90+
arr.asInstanceOf[Array[T]].forall(p)
91+
92+
def [T, U](arr: IArray[T]) foreach(f: T => U): Unit =
93+
arr.asInstanceOf[Array[T]].foreach(f)
94+
95+
def [T](arr: IArray[T]) head: T =
96+
arr.asInstanceOf[Array[T]].head
97+
98+
def [T](arr: IArray[T]) headOption: Option[T] =
99+
arr.asInstanceOf[Array[T]].headOption
100+
101+
def [T](arr: IArray[T]) indexOf(elem: T, from: Int = 0): Int =
102+
arr.asInstanceOf[Array[T]].indexOf(elem, from)
103+
104+
def [T](arr: IArray[T]) indexWhere(p: T => Boolean, from: Int = 0): Int =
105+
arr.asInstanceOf[Array[T]].indexWhere(p, from)
106+
107+
def [T](arr: IArray[T]) indices: Range =
108+
arr.asInstanceOf[Array[T]].indices.asInstanceOf
109+
110+
def [T](arr: IArray[T]) init: IArray[T] =
111+
arr.asInstanceOf[Array[T]].init.asInstanceOf
112+
113+
def [T](arr: IArray[T]) isEmpty: Boolean =
114+
arr.asInstanceOf[Array[T]].isEmpty
115+
116+
def [T](arr: IArray[T]) iterator: Iterator[T] =
117+
arr.asInstanceOf[Array[T]].iterator
118+
119+
def [T](arr: IArray[T]) last: T =
120+
arr.asInstanceOf[Array[T]].last
121+
122+
def [T](arr: IArray[T]) lastOption: Option[T] =
123+
arr.asInstanceOf[Array[T]].lastOption
124+
125+
def [T](arr: IArray[T]) lastIndexOf(elem: T, from: Int = 0): Int =
126+
arr.asInstanceOf[Array[T]].lastIndexOf(elem, from)
127+
128+
def [T](arr: IArray[T]) lastIndexWhere(p: T => Boolean, from: Int = 0): Int =
129+
arr.asInstanceOf[Array[T]].lastIndexWhere(p, from)
130+
131+
def [T, U: ClassTag](arr: IArray[T]) map(f: T => U): IArray[U] =
132+
arr.asInstanceOf[Array[T]].map(f).asInstanceOf
133+
134+
def [T](arr: IArray[T]) nonEmpty: Boolean =
135+
arr.asInstanceOf[Array[T]].nonEmpty
136+
137+
def [T](arr: IArray[T]) partition(p: T => Boolean): (IArray[T], IArray[T]) =
138+
arr.asInstanceOf[Array[T]].partition(p) match {
139+
case (x, y) => (x.asInstanceOf[IArray[T]], y.asInstanceOf[IArray[T]])
140+
}
141+
142+
def [T](arr: IArray[T]) reverse: IArray[T] =
143+
arr.asInstanceOf[Array[T]].reverse.asInstanceOf
144+
145+
def [T, U >: T: ClassTag](arr: IArray[T]) scan(z: U)(op: (U, U) => U): Array[U] =
146+
arr.asInstanceOf[Array[T]].scan(z)(op).asInstanceOf
147+
148+
def [T, U: ClassTag](arr: IArray[T]) scanLeft(z: U)(op: (U, T) => U): Array[U] =
149+
arr.asInstanceOf[Array[T]].scanLeft(z)(op).asInstanceOf
150+
151+
def [T, U: ClassTag](arr: IArray[T]) scanRight(z: U)(op: (T, U) => U): Array[U] =
152+
arr.asInstanceOf[Array[T]].scanRight(z)(op).asInstanceOf
153+
154+
def [T](arr: IArray[T]) size: Int =
155+
arr.asInstanceOf[Array[T]].size
156+
157+
def [T](arr: IArray[T]) slice(from: Int, until: Int): Array[T] =
158+
arr.asInstanceOf[Array[T]].slice(from, until).asInstanceOf
159+
160+
def [T, U: ClassTag](arr: IArray[T]) sortBy(f: T => U)(given math.Ordering[U]): IArray[T] =
161+
arr.asInstanceOf[Array[T]].sortBy(f).asInstanceOf
162+
163+
def [T](arr: IArray[T]) sortWith(f: (T, T) => Boolean): IArray[T] =
164+
arr.asInstanceOf[Array[T]].sortWith(f).asInstanceOf
165+
166+
def [T](arr: IArray[T]) sorted(given math.Ordering[T]): IArray[T] =
167+
arr.asInstanceOf[Array[T]].sorted.asInstanceOf
168+
169+
def [T](arr: IArray[T]) span(p: T => Boolean): (IArray[T], IArray[T]) =
170+
arr.asInstanceOf[Array[T]].span(p) match {
171+
case (x, y) => (x.asInstanceOf[IArray[T]], y.asInstanceOf[IArray[T]])
172+
}
173+
174+
def [T](arr: IArray[T]) splitAt(n: Int): (IArray[T], IArray[T]) =
175+
arr.asInstanceOf[Array[T]].splitAt(n) match {
176+
case (x, y) => (x.asInstanceOf[IArray[T]], y.asInstanceOf[IArray[T]])
177+
}
178+
179+
def [T, U >: T: ClassTag](arr: IArray[T]) startsWith(that: IArray[U], offset: Int = 0): Boolean =
180+
arr.asInstanceOf[Array[T]].startsWith(that.asInstanceOf[Array[U]])
181+
182+
def [T](arr: IArray[T]) tail: IArray[T] =
183+
arr.asInstanceOf[Array[T]].tail.asInstanceOf
184+
185+
def [T](arr: IArray[T]) take(n: Int): IArray[T] =
186+
arr.asInstanceOf[Array[T]].take(n).asInstanceOf
187+
188+
def [T](arr: IArray[T]) takeRight(n: Int): IArray[T] =
189+
arr.asInstanceOf[Array[T]].takeRight(n).asInstanceOf
190+
191+
def [T](arr: IArray[T]) takeWhile(p: T => Boolean): IArray[T] =
192+
arr.asInstanceOf[Array[T]].takeWhile(p).asInstanceOf
193+
194+
// def [T, U: ClassTag, V: ClassTag](arr: IArray[T]) unzip(given T => (U, V)): (IArray[U], IArray[V]) =
195+
// arr.asInstanceOf[Array[T]].unzip match {
196+
// case (x, y) => (x.asInstanceOf[IArray[U]], y.asInstanceOf[IArray[V]])
197+
// }
198+
199+
def [T, U: ClassTag](arr: IArray[T]) zip(that: IterableOnce[U]): IArray[(T, U)] =
200+
arr.asInstanceOf[Array[T]].zip(that).asInstanceOf
41201
end opaques
42202

43203
type IArray[+T] = opaques.IArray[T]
@@ -223,168 +383,4 @@ object IArray {
223383
* @return sequence wrapped in a [[scala.Some]], if `x` is a Seq, otherwise `None`
224384
*/
225385
def unapplySeq[T](x: IArray[T]) = Array.unapplySeq[T](x.asInstanceOf[Array[T]])
226-
227-
228-
229-
/** All the methods on Array[T] that don't mutate in-place can be used with IArray[T].
230-
*/
231-
given arrayOps: Object {
232-
def [T, U >: T: ClassTag](arr: IArray[T]) ++(that: IArray[U]): IArray[U] =
233-
(arr.asInstanceOf[Array[T]] ++ that.asInstanceOf[Array[U]]).asInstanceOf
234-
235-
def [T](arr: IArray[T])contains(elem: T): Boolean =
236-
arr.asInstanceOf[Array[T]].contains(elem)
237-
238-
def [T](arr: IArray[T]) count(p: T => Boolean): Int =
239-
arr.asInstanceOf[Array[T]].count(p)
240-
241-
def [T](arr: IArray[T]) drop(n: Int): IArray[T] =
242-
arr.asInstanceOf[Array[T]].drop(n).asInstanceOf
243-
244-
def [T](arr: IArray[T]) dropRight(n: Int): IArray[T] =
245-
arr.asInstanceOf[Array[T]].dropRight(n).asInstanceOf
246-
247-
def [T](arr: IArray[T]) dropWhile(p: T => Boolean): IArray[T] =
248-
arr.asInstanceOf[Array[T]].dropWhile(p).asInstanceOf
249-
250-
def [T](arr: IArray[T]) exists(p: T => Boolean): IArray[T] =
251-
arr.asInstanceOf[Array[T]].exists(p).asInstanceOf
252-
253-
def [T](arr: IArray[T]) filter(p: T => Boolean): IArray[T] =
254-
arr.asInstanceOf[Array[T]].filter(p).asInstanceOf
255-
256-
def [T](arr: IArray[T]) filterNot(p: T => Boolean): IArray[T] =
257-
arr.asInstanceOf[Array[T]].filterNot(p).asInstanceOf
258-
259-
def [T](arr: IArray[T]) find(p: T => Boolean): Option[T] =
260-
arr.asInstanceOf[Array[T]].find(p).asInstanceOf
261-
262-
def [T, U: ClassTag](arr: IArray[T]) flatMap(f: T => IterableOnce[U]): IArray[U] =
263-
arr.asInstanceOf[Array[T]].flatMap(f).asInstanceOf
264-
265-
def [T, U: ClassTag](arr: IArray[T]) flatten(given T => Iterable[U]): IArray[U] =
266-
arr.asInstanceOf[Array[T]].flatten.asInstanceOf
267-
268-
def [T, U >: T: ClassTag](arr: IArray[T]) fold(z: U)(op: (U, U) => U): U =
269-
arr.asInstanceOf[Array[T]].fold(z)(op).asInstanceOf
270-
271-
def [T, U >: T: ClassTag](arr: IArray[T]) foldLeft(z: U)(op: (U, T) => U): U =
272-
arr.asInstanceOf[Array[T]].foldLeft(z)(op).asInstanceOf
273-
274-
def [T, U >: T: ClassTag](arr: IArray[T]) foldRight(z: U)(op: (T, U) => U): U =
275-
arr.asInstanceOf[Array[T]].foldRight(z)(op).asInstanceOf
276-
277-
def [T](arr: IArray[T]) forall(p: T => Boolean): Boolean =
278-
arr.asInstanceOf[Array[T]].forall(p)
279-
280-
def [T, U](arr: IArray[T]) foreach(f: T => U): Unit =
281-
arr.asInstanceOf[Array[T]].foreach(f)
282-
283-
def [T](arr: IArray[T]) head: T =
284-
arr.asInstanceOf[Array[T]].head
285-
286-
def [T](arr: IArray[T]) headOption: Option[T] =
287-
arr.asInstanceOf[Array[T]].headOption
288-
289-
def [T](arr: IArray[T]) indexOf(elem: T, from: Int = 0): Int =
290-
arr.asInstanceOf[Array[T]].indexOf(elem, from)
291-
292-
def [T](arr: IArray[T]) indexWhere(p: T => Boolean, from: Int = 0): Int =
293-
arr.asInstanceOf[Array[T]].indexWhere(p, from)
294-
295-
def [T](arr: IArray[T]) indices: Range =
296-
arr.asInstanceOf[Array[T]].indices.asInstanceOf
297-
298-
def [T](arr: IArray[T]) init: IArray[T] =
299-
arr.asInstanceOf[Array[T]].init.asInstanceOf
300-
301-
def [T](arr: IArray[T]) isEmpty: Boolean =
302-
arr.asInstanceOf[Array[T]].isEmpty
303-
304-
def [T](arr: IArray[T]) iterator: Iterator[T] =
305-
arr.asInstanceOf[Array[T]].iterator
306-
307-
def [T](arr: IArray[T]) last: T =
308-
arr.asInstanceOf[Array[T]].last
309-
310-
def [T](arr: IArray[T]) lastOption: Option[T] =
311-
arr.asInstanceOf[Array[T]].lastOption
312-
313-
def [T](arr: IArray[T]) lastIndexOf(elem: T, from: Int = 0): Int =
314-
arr.asInstanceOf[Array[T]].lastIndexOf(elem, from)
315-
316-
def [T](arr: IArray[T]) lastIndexWhere(p: T => Boolean, from: Int = 0): Int =
317-
arr.asInstanceOf[Array[T]].lastIndexWhere(p, from)
318-
319-
def [T, U: ClassTag](arr: IArray[T]) map(f: T => U): IArray[U] =
320-
arr.asInstanceOf[Array[T]].map(f).asInstanceOf
321-
322-
def [T](arr: IArray[T]) nonEmpty: Boolean =
323-
arr.asInstanceOf[Array[T]].nonEmpty
324-
325-
def [T](arr: IArray[T]) partition(p: T => Boolean): (IArray[T], IArray[T]) =
326-
arr.asInstanceOf[Array[T]].partition(p) match {
327-
case (x, y) => (x.asInstanceOf[IArray[T]], y.asInstanceOf[IArray[T]])
328-
}
329-
330-
def [T](arr: IArray[T]) reverse: IArray[T] =
331-
arr.asInstanceOf[Array[T]].reverse.asInstanceOf
332-
333-
def [T, U >: T: ClassTag](arr: IArray[T]) scan(z: U)(op: (U, U) => U): Array[U] =
334-
arr.asInstanceOf[Array[T]].scan(z)(op).asInstanceOf
335-
336-
def [T, U: ClassTag](arr: IArray[T]) scanLeft(z: U)(op: (U, T) => U): Array[U] =
337-
arr.asInstanceOf[Array[T]].scanLeft(z)(op).asInstanceOf
338-
339-
def [T, U: ClassTag](arr: IArray[T]) scanRight(z: U)(op: (T, U) => U): Array[U] =
340-
arr.asInstanceOf[Array[T]].scanRight(z)(op).asInstanceOf
341-
342-
def [T](arr: IArray[T]) size: Int =
343-
arr.asInstanceOf[Array[T]].size
344-
345-
def [T](arr: IArray[T]) slice(from: Int, until: Int): Array[T] =
346-
arr.asInstanceOf[Array[T]].slice(from, until).asInstanceOf
347-
348-
def [T, U: ClassTag](arr: IArray[T]) sortBy(f: T => U)(given math.Ordering[U]): IArray[T] =
349-
arr.asInstanceOf[Array[T]].sortBy(f).asInstanceOf
350-
351-
def [T](arr: IArray[T]) sortWith(f: (T, T) => Boolean): IArray[T] =
352-
arr.asInstanceOf[Array[T]].sortWith(f).asInstanceOf
353-
354-
def [T](arr: IArray[T]) sorted(given math.Ordering[T]): IArray[T] =
355-
arr.asInstanceOf[Array[T]].sorted.asInstanceOf
356-
357-
def [T](arr: IArray[T]) span(p: T => Boolean): (IArray[T], IArray[T]) =
358-
arr.asInstanceOf[Array[T]].span(p) match {
359-
case (x, y) => (x.asInstanceOf[IArray[T]], y.asInstanceOf[IArray[T]])
360-
}
361-
362-
def [T](arr: IArray[T]) splitAt(n: Int): (IArray[T], IArray[T]) =
363-
arr.asInstanceOf[Array[T]].splitAt(n) match {
364-
case (x, y) => (x.asInstanceOf[IArray[T]], y.asInstanceOf[IArray[T]])
365-
}
366-
367-
def [T, U >: T: ClassTag](arr: IArray[T]) startsWith(that: IArray[U], offset: Int = 0): Boolean =
368-
arr.asInstanceOf[Array[T]].startsWith(that.asInstanceOf[Array[U]])
369-
370-
def [T](arr: IArray[T]) tail: IArray[T] =
371-
arr.asInstanceOf[Array[T]].tail.asInstanceOf
372-
373-
def [T](arr: IArray[T]) take(n: Int): IArray[T] =
374-
arr.asInstanceOf[Array[T]].take(n).asInstanceOf
375-
376-
def [T](arr: IArray[T]) takeRight(n: Int): IArray[T] =
377-
arr.asInstanceOf[Array[T]].takeRight(n).asInstanceOf
378-
379-
def [T](arr: IArray[T]) takeWhile(p: T => Boolean): IArray[T] =
380-
arr.asInstanceOf[Array[T]].takeWhile(p).asInstanceOf
381-
382-
def [T, U: ClassTag, V: ClassTag](arr: IArray[T]) unzip(given T => (U, V)): (IArray[U], IArray[V]) =
383-
arr.asInstanceOf[Array[T]].unzip match {
384-
case (x, y) => (x.asInstanceOf[IArray[U]], y.asInstanceOf[IArray[V]])
385-
}
386-
387-
def [T, U: ClassTag](arr: IArray[T]) zip(that: IterableOnce[U]): IArray[(T, U)] =
388-
arr.asInstanceOf[Array[T]].zip(that).asInstanceOf
389-
}
390386
}

0 commit comments

Comments
 (0)