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