@@ -6,8 +6,160 @@ import scala.reflect.ClassTag
66object 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