@@ -38,6 +38,166 @@ object opaques
38
38
def (arr : IArray [Double ]) length : Int = arr.asInstanceOf [Array [Double ]].length
39
39
def (arr : IArray [Object ]) length : Int = arr.asInstanceOf [Array [Object ]].length
40
40
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
41
201
end opaques
42
202
43
203
type IArray [+ T ] = opaques.IArray [T ]
@@ -223,168 +383,4 @@ object IArray {
223
383
* @return sequence wrapped in a [[scala.Some ]], if `x` is a Seq, otherwise `None`
224
384
*/
225
385
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
- }
390
386
}
0 commit comments