@@ -90,6 +90,10 @@ export class Int8Array extends ArrayBufferView {
90
90
return MAP < Int8Array , i8 > ( this , fn ) ;
91
91
}
92
92
93
+ filter ( fn : ( value : i8 , index : i32 , self : Int8Array ) => bool ) : Int8Array {
94
+ return FILTER < Int8Array , i8 > ( this , fn ) ;
95
+ }
96
+
93
97
findIndex ( fn : ( value : i8 , index : i32 , self : Int8Array ) => bool ) : i32 {
94
98
return FIND_INDEX < Int8Array , i8 > ( this , fn ) ;
95
99
}
@@ -202,6 +206,10 @@ export class Uint8Array extends ArrayBufferView {
202
206
return MAP < Uint8Array , u8 > ( this , fn ) ;
203
207
}
204
208
209
+ filter ( fn : ( value : u8 , index : i32 , self : Uint8Array ) => bool ) : Uint8Array {
210
+ return FILTER < Uint8Array , u8 > ( this , fn ) ;
211
+ }
212
+
205
213
findIndex ( fn : ( value : u8 , index : i32 , self : Uint8Array ) => bool ) : i32 {
206
214
return FIND_INDEX < Uint8Array , u8 > ( this , fn ) ;
207
215
}
@@ -314,6 +322,10 @@ export class Uint8ClampedArray extends ArrayBufferView {
314
322
return MAP < Uint8ClampedArray , u8 > ( this , fn ) ;
315
323
}
316
324
325
+ filter ( fn : ( value : u8 , index : i32 , self : Uint8ClampedArray ) => bool ) : Uint8ClampedArray {
326
+ return FILTER < Uint8ClampedArray , u8 > ( this , fn ) ;
327
+ }
328
+
317
329
findIndex ( fn : ( value : u8 , index : i32 , self : Uint8ClampedArray ) => bool ) : i32 {
318
330
return FIND_INDEX < Uint8ClampedArray , u8 > ( this , fn ) ;
319
331
}
@@ -426,6 +438,10 @@ export class Int16Array extends ArrayBufferView {
426
438
return MAP < Int16Array , i16 > ( this , fn ) ;
427
439
}
428
440
441
+ filter ( fn : ( value : i16 , index : i32 , self : Int16Array ) => bool ) : Int16Array {
442
+ return FILTER < Int16Array , i16 > ( this , fn ) ;
443
+ }
444
+
429
445
findIndex ( fn : ( value : i16 , index : i32 , self : Int16Array ) => bool ) : i32 {
430
446
return FIND_INDEX < Int16Array , i16 > ( this , fn ) ;
431
447
}
@@ -538,6 +554,10 @@ export class Uint16Array extends ArrayBufferView {
538
554
return MAP < Uint16Array , u16 > ( this , fn ) ;
539
555
}
540
556
557
+ filter ( fn : ( value : u16 , index : i32 , self : Uint16Array ) => bool ) : Uint16Array {
558
+ return FILTER < Uint16Array , u16 > ( this , fn ) ;
559
+ }
560
+
541
561
findIndex ( fn : ( value : u16 , index : i32 , self : Uint16Array ) => bool ) : i32 {
542
562
return FIND_INDEX < Uint16Array , u16 > ( this , fn ) ;
543
563
}
@@ -650,6 +670,10 @@ export class Int32Array extends ArrayBufferView {
650
670
return MAP < Int32Array , i32 > ( this , fn ) ;
651
671
}
652
672
673
+ filter ( fn : ( value : i32 , index : i32 , self : Int32Array ) => bool ) : Int32Array {
674
+ return FILTER < Int32Array , i32 > ( this , fn ) ;
675
+ }
676
+
653
677
findIndex ( fn : ( value : i32 , index : i32 , self : Int32Array ) => bool ) : i32 {
654
678
return FIND_INDEX < Int32Array , i32 > ( this , fn ) ;
655
679
}
@@ -762,6 +786,10 @@ export class Uint32Array extends ArrayBufferView {
762
786
return MAP < Uint32Array , u32 > ( this , fn ) ;
763
787
}
764
788
789
+ filter ( fn : ( value : u32 , index : i32 , self : Uint32Array ) => bool ) : Uint32Array {
790
+ return FILTER < Uint32Array , u32 > ( this , fn ) ;
791
+ }
792
+
765
793
findIndex ( fn : ( value : u32 , index : i32 , self : Uint32Array ) => bool ) : i32 {
766
794
return FIND_INDEX < Uint32Array , u32 > ( this , fn ) ;
767
795
}
@@ -874,6 +902,10 @@ export class Int64Array extends ArrayBufferView {
874
902
return MAP < Int64Array , i64 > ( this , fn ) ;
875
903
}
876
904
905
+ filter ( fn : ( value : i64 , index : i32 , self : Int64Array ) => bool ) : Int64Array {
906
+ return FILTER < Int64Array , i64 > ( this , fn ) ;
907
+ }
908
+
877
909
findIndex ( fn : ( value : i64 , index : i32 , self : Int64Array ) => bool ) : i32 {
878
910
return FIND_INDEX < Int64Array , i64 > ( this , fn ) ;
879
911
}
@@ -986,6 +1018,10 @@ export class Uint64Array extends ArrayBufferView {
986
1018
return MAP < Uint64Array , u64 > ( this , fn ) ;
987
1019
}
988
1020
1021
+ filter ( fn : ( value : u64 , index : i32 , self : Uint64Array ) => bool ) : Uint64Array {
1022
+ return FILTER < Uint64Array , u64 > ( this , fn ) ;
1023
+ }
1024
+
989
1025
findIndex ( fn : ( value : u64 , index : i32 , self : Uint64Array ) => bool ) : i32 {
990
1026
return FIND_INDEX < Uint64Array , u64 > ( this , fn ) ;
991
1027
}
@@ -1098,6 +1134,10 @@ export class Float32Array extends ArrayBufferView {
1098
1134
return MAP < Float32Array , f32 > ( this , fn ) ;
1099
1135
}
1100
1136
1137
+ filter ( fn : ( value : f32 , index : i32 , self : Float32Array ) => bool ) : Float32Array {
1138
+ return FILTER < Float32Array , f32 > ( this , fn ) ;
1139
+ }
1140
+
1101
1141
findIndex ( fn : ( value : f32 , index : i32 , self : Float32Array ) => bool ) : i32 {
1102
1142
return FIND_INDEX < Float32Array , f32 > ( this , fn ) ;
1103
1143
}
@@ -1210,6 +1250,10 @@ export class Float64Array extends ArrayBufferView {
1210
1250
return MAP < Float64Array , f64 > ( this , fn ) ;
1211
1251
}
1212
1252
1253
+ filter ( fn : ( value : f64 , index : i32 , self : Float64Array ) => bool ) : Float64Array {
1254
+ return FILTER < Float64Array , f64 > ( this , fn ) ;
1255
+ }
1256
+
1213
1257
findIndex ( fn : ( value : f64 , index : i32 , self : Float64Array ) => bool ) : i32 {
1214
1258
return FIND_INDEX < Float64Array , f64 > ( this , fn ) ;
1215
1259
}
@@ -1364,6 +1408,35 @@ function MAP<TArray extends ArrayBufferView, T>(
1364
1408
return out ;
1365
1409
}
1366
1410
1411
+ // @ts -ignore: decorator
1412
+ @inline
1413
+ function FILTER < TArray extends ArrayBufferView , T > (
1414
+ array : TArray ,
1415
+ fn : ( value : T , index : i32 , self : TArray ) => bool ,
1416
+ ) : TArray {
1417
+ var len = array . length ;
1418
+ var out = changetype < TArray > ( __alloc ( offsetof < TArray > ( ) , idof < TArray > ( ) ) ) ;
1419
+ var buffer = __alloc ( len << alignof < T > ( ) , idof < ArrayBuffer > ( ) ) ;
1420
+ var dataStart = array . dataStart ;
1421
+ var j : usize = 0 ;
1422
+ for ( let i = 0 ; i < len ; i ++ ) {
1423
+ let value = load < T > ( dataStart + ( < usize > i << alignof < T > ( ) ) ) ;
1424
+ if ( fn ( value , i , array ) ) {
1425
+ store < T > (
1426
+ buffer + ( j ++ << alignof < T > ( ) ) ,
1427
+ value
1428
+ ) ;
1429
+ }
1430
+ }
1431
+ // shrink output buffer
1432
+ var length = j << alignof < T > ( ) ;
1433
+ var data = __realloc ( buffer , length ) ;
1434
+ out . data = changetype < ArrayBuffer > ( data ) ; // retain
1435
+ out . dataStart = data ;
1436
+ out . dataLength = length ;
1437
+ return out ;
1438
+ }
1439
+
1367
1440
// @ts -ignore: decorator
1368
1441
@inline
1369
1442
function FIND_INDEX < TArray extends ArrayBufferView , T > (
0 commit comments