@@ -42,162 +42,162 @@ object opaques
4242 /** All the methods on Array[T] that don't mutate in-place can be used with IArray[T].
4343 */
4444 def [T , U >: T : ClassTag ](arr : IArray [T ]) ++ (that : IArray [U ]): IArray [U ] =
45- (arr. asInstanceOf [ Array [ T ]] ++ that.asInstanceOf [Array [U ]]).asInstanceOf [IArray [U ]]
45+ (genericArrayOps( arr) ++ that.asInstanceOf [Array [U ]]).asInstanceOf [IArray [U ]]
4646
4747 def [T ](arr : IArray [T ]) contains(elem : T ): Boolean =
48- arr.asInstanceOf [Array [T ]].contains(elem)
48+ genericArrayOps( arr.asInstanceOf [Array [T ]]) .contains(elem)
4949
5050 def [T ](arr : IArray [T ]) count(p : T => Boolean ): Int =
51- arr. asInstanceOf [ Array [ T ]] .count(p)
51+ genericArrayOps( arr) .count(p)
5252
5353 def [T ](arr : IArray [T ]) drop(n : Int ): IArray [T ] =
54- arr. asInstanceOf [ Array [ T ]] .drop(n).asInstanceOf [IArray [T ]]
54+ genericArrayOps( arr) .drop(n).asInstanceOf [IArray [T ]]
5555
5656 def [T ](arr : IArray [T ]) dropRight(n : Int ): IArray [T ] =
57- arr. asInstanceOf [ Array [ T ]] .dropRight(n).asInstanceOf [IArray [T ]]
57+ genericArrayOps( arr) .dropRight(n).asInstanceOf [IArray [T ]]
5858
5959 def [T ](arr : IArray [T ]) dropWhile(p : T => Boolean ): IArray [T ] =
60- arr. asInstanceOf [ Array [ T ]] .dropWhile(p).asInstanceOf [IArray [T ]]
60+ genericArrayOps( arr) .dropWhile(p).asInstanceOf [IArray [T ]]
6161
6262 def [T ](arr : IArray [T ]) exists(p : T => Boolean ): IArray [T ] =
63- arr. asInstanceOf [ Array [ T ]] .exists(p).asInstanceOf [IArray [T ]]
63+ genericArrayOps( arr) .exists(p).asInstanceOf [IArray [T ]]
6464
6565 def [T ](arr : IArray [T ]) filter(p : T => Boolean ): IArray [T ] =
66- arr. asInstanceOf [ Array [ T ]] .filter(p).asInstanceOf [IArray [T ]]
66+ genericArrayOps( arr) .filter(p).asInstanceOf [IArray [T ]]
6767
6868 def [T ](arr : IArray [T ]) filterNot(p : T => Boolean ): IArray [T ] =
69- arr. asInstanceOf [ Array [ T ]] .filterNot(p).asInstanceOf [IArray [T ]]
69+ genericArrayOps( arr) .filterNot(p).asInstanceOf [IArray [T ]]
7070
7171 def [T ](arr : IArray [T ]) find(p : T => Boolean ): Option [T ] =
72- arr. asInstanceOf [ Array [ T ]] .find(p)
72+ genericArrayOps( arr) .find(p)
7373
7474 def [T , U : ClassTag ](arr : IArray [T ]) flatMap(f : T => IterableOnce [U ]): IArray [U ] =
75- arr. asInstanceOf [ Array [ T ]] .flatMap(f).asInstanceOf [IArray [U ]]
75+ genericArrayOps( arr) .flatMap(f).asInstanceOf [IArray [U ]]
7676
7777 def [T , U : ClassTag ](arr : IArray [T ]) flatten(given T => Iterable [U ]): IArray [U ] =
78- arr. asInstanceOf [ Array [ T ]] .flatten.asInstanceOf [IArray [U ]]
78+ genericArrayOps( arr) .flatten.asInstanceOf [IArray [U ]]
7979
8080 def [T , U >: T : ClassTag ](arr : IArray [T ]) fold(z : U )(op : (U , U ) => U ): U =
81- arr. asInstanceOf [ Array [ T ]] .fold(z)(op)
81+ genericArrayOps( arr) .fold(z)(op)
8282
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)
83+ def [T , U : ClassTag ](arr : IArray [T ]) foldLeft(z : U )(op : (U , T ) => U ): U =
84+ genericArrayOps( arr) .foldLeft(z)(op)
8585
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)
86+ def [T , U : ClassTag ](arr : IArray [T ]) foldRight(z : U )(op : (T , U ) => U ): U =
87+ genericArrayOps( arr) .foldRight(z)(op)
8888
8989 def [T ](arr : IArray [T ]) forall(p : T => Boolean ): Boolean =
90- arr. asInstanceOf [ Array [ T ]] .forall(p)
90+ genericArrayOps( arr) .forall(p)
9191
9292 def [T , U ](arr : IArray [T ]) foreach(f : T => U ): Unit =
93- arr. asInstanceOf [ Array [ T ]] .foreach(f)
93+ genericArrayOps( arr) .foreach(f)
9494
9595 def [T ](arr : IArray [T ]) head : T =
96- arr. asInstanceOf [ Array [ T ]] .head
96+ genericArrayOps( arr) .head
9797
9898 def [T ](arr : IArray [T ]) headOption : Option [T ] =
99- arr. asInstanceOf [ Array [ T ]] .headOption
99+ genericArrayOps( arr) .headOption
100100
101101 def [T ](arr : IArray [T ]) indexOf(elem : T , from : Int = 0 ): Int =
102- arr.asInstanceOf [Array [T ]].indexOf(elem, from)
102+ genericArrayOps( arr.asInstanceOf [Array [T ]]) .indexOf(elem, from)
103103
104104 def [T ](arr : IArray [T ]) indexWhere(p : T => Boolean , from : Int = 0 ): Int =
105- arr. asInstanceOf [ Array [ T ]] .indexWhere(p, from)
105+ genericArrayOps( arr) .indexWhere(p, from)
106106
107107 def [T ](arr : IArray [T ]) indices : Range =
108- arr. asInstanceOf [ Array [ T ]] .indices
108+ genericArrayOps( arr) .indices
109109
110110 def [T ](arr : IArray [T ]) init : IArray [T ] =
111- arr. asInstanceOf [ Array [ T ]] .init.asInstanceOf [IArray [T ]]
111+ genericArrayOps( arr) .init.asInstanceOf [IArray [T ]]
112112
113113 def [T ](arr : IArray [T ]) isEmpty : Boolean =
114- arr. asInstanceOf [ Array [ T ]] .isEmpty
114+ genericArrayOps( arr) .isEmpty
115115
116116 def [T ](arr : IArray [T ]) iterator : Iterator [T ] =
117- arr. asInstanceOf [ Array [ T ]] .iterator
117+ genericArrayOps( arr) .iterator
118118
119119 def [T ](arr : IArray [T ]) last : T =
120- arr. asInstanceOf [ Array [ T ]] .last
120+ genericArrayOps( arr) .last
121121
122122 def [T ](arr : IArray [T ]) lastOption : Option [T ] =
123- arr. asInstanceOf [ Array [ T ]] .lastOption
123+ genericArrayOps( arr) .lastOption
124124
125125 def [T ](arr : IArray [T ]) lastIndexOf(elem : T , from : Int = 0 ): Int =
126- arr.asInstanceOf [Array [T ]].lastIndexOf(elem, from)
126+ genericArrayOps( arr.asInstanceOf [Array [T ]]) .lastIndexOf(elem, from)
127127
128128 def [T ](arr : IArray [T ]) lastIndexWhere(p : T => Boolean , from : Int = 0 ): Int =
129- arr. asInstanceOf [ Array [ T ]] .lastIndexWhere(p, from)
129+ genericArrayOps( arr) .lastIndexWhere(p, from)
130130
131131 def [T , U : ClassTag ](arr : IArray [T ]) map(f : T => U ): IArray [U ] =
132- arr. asInstanceOf [ Array [ T ]] .map(f).asInstanceOf [IArray [U ]]
132+ genericArrayOps( arr) .map(f).asInstanceOf [IArray [U ]]
133133
134134 def [T ](arr : IArray [T ]) nonEmpty : Boolean =
135- arr. asInstanceOf [ Array [ T ]] .nonEmpty
135+ genericArrayOps( arr) .nonEmpty
136136
137137 def [T ](arr : IArray [T ]) partition(p : T => Boolean ): (IArray [T ], IArray [T ]) =
138- arr. asInstanceOf [ Array [ T ]] .partition(p) match {
138+ genericArrayOps( arr) .partition(p) match {
139139 case (x, y) => (x.asInstanceOf [IArray [T ]], y.asInstanceOf [IArray [T ]])
140140 }
141141
142142 def [T ](arr : IArray [T ]) reverse : IArray [T ] =
143- arr. asInstanceOf [ Array [ T ]] .reverse.asInstanceOf [IArray [T ]]
143+ genericArrayOps( arr) .reverse.asInstanceOf [IArray [T ]]
144144
145145 def [T , U >: T : ClassTag ](arr : IArray [T ]) scan(z : U )(op : (U , U ) => U ): IArray [U ] =
146- arr. asInstanceOf [ Array [ T ]] .scan(z)(op).asInstanceOf [IArray [U ]]
146+ genericArrayOps( arr) .scan(z)(op).asInstanceOf [IArray [U ]]
147147
148148 def [T , U : ClassTag ](arr : IArray [T ]) scanLeft(z : U )(op : (U , T ) => U ): IArray [U ] =
149- arr. asInstanceOf [ Array [ T ]] .scanLeft(z)(op).asInstanceOf [IArray [U ]]
149+ genericArrayOps( arr) .scanLeft(z)(op).asInstanceOf [IArray [U ]]
150150
151151 def [T , U : ClassTag ](arr : IArray [T ]) scanRight(z : U )(op : (T , U ) => U ): IArray [U ] =
152- arr. asInstanceOf [ Array [ T ]] .scanRight(z)(op).asInstanceOf [IArray [U ]]
152+ genericArrayOps( arr) .scanRight(z)(op).asInstanceOf [IArray [U ]]
153153
154154 def [T ](arr : IArray [T ]) size : Int =
155- arr.asInstanceOf [ Array [ T ]].size
155+ arr.length
156156
157157 def [T ](arr : IArray [T ]) slice(from : Int , until : Int ): IArray [T ] =
158- arr. asInstanceOf [ Array [ T ]] .slice(from, until).asInstanceOf [IArray [T ]]
158+ genericArrayOps( arr) .slice(from, until).asInstanceOf [IArray [T ]]
159159
160160 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 [IArray [T ]]
161+ genericArrayOps( arr) .sortBy(f).asInstanceOf [IArray [T ]]
162162
163163 def [T ](arr : IArray [T ]) sortWith(f : (T , T ) => Boolean ): IArray [T ] =
164- arr. asInstanceOf [ Array [ T ]] .sortWith(f).asInstanceOf [IArray [T ]]
164+ genericArrayOps( arr) .sortWith(f).asInstanceOf [IArray [T ]]
165165
166166 def [T ](arr : IArray [T ]) sorted(given math .Ordering [T ]): IArray [T ] =
167- arr. asInstanceOf [ Array [ T ]] .sorted.asInstanceOf [IArray [T ]]
167+ genericArrayOps( arr) .sorted.asInstanceOf [IArray [T ]]
168168
169169 def [T ](arr : IArray [T ]) span(p : T => Boolean ): (IArray [T ], IArray [T ]) =
170- arr. asInstanceOf [ Array [ T ]] .span(p) match {
170+ genericArrayOps( arr) .span(p) match {
171171 case (x, y) => (x.asInstanceOf [IArray [T ]], y.asInstanceOf [IArray [T ]])
172172 }
173173
174174 def [T ](arr : IArray [T ]) splitAt(n : Int ): (IArray [T ], IArray [T ]) =
175- arr. asInstanceOf [ Array [ T ]] .splitAt(n) match {
175+ genericArrayOps( arr) .splitAt(n) match {
176176 case (x, y) => (x.asInstanceOf [IArray [T ]], y.asInstanceOf [IArray [T ]])
177177 }
178178
179179 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 ]])
180+ genericArrayOps( arr) .startsWith(that.asInstanceOf [Array [U ]])
181181
182182 def [T ](arr : IArray [T ]) tail : IArray [T ] =
183- arr. asInstanceOf [ Array [ T ]] .tail.asInstanceOf [IArray [T ]]
183+ genericArrayOps( arr) .tail.asInstanceOf [IArray [T ]]
184184
185185 def [T ](arr : IArray [T ]) take(n : Int ): IArray [T ] =
186- arr. asInstanceOf [ Array [ T ]] .take(n).asInstanceOf [IArray [T ]]
186+ genericArrayOps( arr) .take(n).asInstanceOf [IArray [T ]]
187187
188188 def [T ](arr : IArray [T ]) takeRight(n : Int ): IArray [T ] =
189- arr. asInstanceOf [ Array [ T ]] .takeRight(n).asInstanceOf [IArray [T ]]
189+ genericArrayOps( arr) .takeRight(n).asInstanceOf [IArray [T ]]
190190
191191 def [T ](arr : IArray [T ]) takeWhile(p : T => Boolean ): IArray [T ] =
192- arr. asInstanceOf [ Array [ T ]] .takeWhile(p).asInstanceOf [IArray [T ]]
192+ genericArrayOps( arr) .takeWhile(p).asInstanceOf [IArray [T ]]
193193
194194 def [U : ClassTag , V : ClassTag ](arr : IArray [(U , V )]) unzip : (IArray [U ], IArray [V ]) =
195- arr. asInstanceOf [ Array [( U , V )]] .unzip match {
195+ genericArrayOps(arr) .unzip match {
196196 case (x, y) => (x.asInstanceOf [IArray [U ]], y.asInstanceOf [IArray [V ]])
197197 }
198198
199- def [T , U : ClassTag ](arr : IArray [T ]) zip(that : IterableOnce [U ]): IArray [(T , U )] =
200- arr. asInstanceOf [ Array [ T ]] .zip(that).asInstanceOf [IArray [(T , U )]]
199+ def [T , U : ClassTag ](arr : IArray [T ]) zip(that : IArray [U ]): IArray [(T , U )] =
200+ genericArrayOps( arr) .zip(that).asInstanceOf [IArray [(T , U )]]
201201end opaques
202202
203203type IArray [+ T ] = opaques.IArray [T ]
0 commit comments