@@ -107,6 +107,10 @@ export class Int8Array extends ArrayBufferView {
107
107
return FIND_INDEX < Int8Array , i8 > ( this , fn ) ;
108
108
}
109
109
110
+ findLastIndex ( fn : ( value : i8 , index : i32 , self : Int8Array ) => bool ) : i32 {
111
+ return FIND_LAST_INDEX < Int8Array , i8 > ( this , fn ) ;
112
+ }
113
+
110
114
some ( fn : ( value : i8 , index : i32 , self : Int8Array ) => bool ) : bool {
111
115
return SOME < Int8Array , i8 > ( this , fn ) ;
112
116
}
@@ -243,6 +247,10 @@ export class Uint8Array extends ArrayBufferView {
243
247
return FIND_INDEX < Uint8Array , u8 > ( this , fn ) ;
244
248
}
245
249
250
+ findLastIndex ( fn : ( value : u8 , index : i32 , self : Uint8Array ) => bool ) : i32 {
251
+ return FIND_LAST_INDEX < Uint8Array , u8 > ( this , fn ) ;
252
+ }
253
+
246
254
some ( fn : ( value : u8 , index : i32 , self : Uint8Array ) => bool ) : bool {
247
255
return SOME < Uint8Array , u8 > ( this , fn ) ;
248
256
}
@@ -379,6 +387,10 @@ export class Uint8ClampedArray extends ArrayBufferView {
379
387
return FIND_INDEX < Uint8ClampedArray , u8 > ( this , fn ) ;
380
388
}
381
389
390
+ findLastIndex ( fn : ( value : u8 , index : i32 , self : Uint8ClampedArray ) => bool ) : i32 {
391
+ return FIND_LAST_INDEX < Uint8ClampedArray , u8 > ( this , fn ) ;
392
+ }
393
+
382
394
some ( fn : ( value : u8 , index : i32 , self : Uint8ClampedArray ) => bool ) : bool {
383
395
return SOME < Uint8ClampedArray , u8 > ( this , fn ) ;
384
396
}
@@ -515,6 +527,10 @@ export class Int16Array extends ArrayBufferView {
515
527
return FIND_INDEX < Int16Array , i16 > ( this , fn ) ;
516
528
}
517
529
530
+ findLastIndex ( fn : ( value : i16 , index : i32 , self : Int16Array ) => bool ) : i32 {
531
+ return FIND_LAST_INDEX < Int16Array , i16 > ( this , fn ) ;
532
+ }
533
+
518
534
some ( fn : ( value : i16 , index : i32 , self : Int16Array ) => bool ) : bool {
519
535
return SOME < Int16Array , i16 > ( this , fn ) ;
520
536
}
@@ -651,6 +667,10 @@ export class Uint16Array extends ArrayBufferView {
651
667
return FIND_INDEX < Uint16Array , u16 > ( this , fn ) ;
652
668
}
653
669
670
+ findLastIndex ( fn : ( value : u16 , index : i32 , self : Uint16Array ) => bool ) : i32 {
671
+ return FIND_LAST_INDEX < Uint16Array , u16 > ( this , fn ) ;
672
+ }
673
+
654
674
some ( fn : ( value : u16 , index : i32 , self : Uint16Array ) => bool ) : bool {
655
675
return SOME < Uint16Array , u16 > ( this , fn ) ;
656
676
}
@@ -787,6 +807,10 @@ export class Int32Array extends ArrayBufferView {
787
807
return FIND_INDEX < Int32Array , i32 > ( this , fn ) ;
788
808
}
789
809
810
+ findLastIndex ( fn : ( value : i32 , index : i32 , self : Int32Array ) => bool ) : i32 {
811
+ return FIND_LAST_INDEX < Int32Array , i32 > ( this , fn ) ;
812
+ }
813
+
790
814
some ( fn : ( value : i32 , index : i32 , self : Int32Array ) => bool ) : bool {
791
815
return SOME < Int32Array , i32 > ( this , fn ) ;
792
816
}
@@ -923,6 +947,10 @@ export class Uint32Array extends ArrayBufferView {
923
947
return FIND_INDEX < Uint32Array , u32 > ( this , fn ) ;
924
948
}
925
949
950
+ findLastIndex ( fn : ( value : u32 , index : i32 , self : Uint32Array ) => bool ) : i32 {
951
+ return FIND_LAST_INDEX < Uint32Array , u32 > ( this , fn ) ;
952
+ }
953
+
926
954
some ( fn : ( value : u32 , index : i32 , self : Uint32Array ) => bool ) : bool {
927
955
return SOME < Uint32Array , u32 > ( this , fn ) ;
928
956
}
@@ -1059,6 +1087,10 @@ export class Int64Array extends ArrayBufferView {
1059
1087
return FIND_INDEX < Int64Array , i64 > ( this , fn ) ;
1060
1088
}
1061
1089
1090
+ findLastIndex ( fn : ( value : i64 , index : i32 , self : Int64Array ) => bool ) : i32 {
1091
+ return FIND_LAST_INDEX < Int64Array , i64 > ( this , fn ) ;
1092
+ }
1093
+
1062
1094
some ( fn : ( value : i64 , index : i32 , self : Int64Array ) => bool ) : bool {
1063
1095
return SOME < Int64Array , i64 > ( this , fn ) ;
1064
1096
}
@@ -1195,6 +1227,10 @@ export class Uint64Array extends ArrayBufferView {
1195
1227
return FIND_INDEX < Uint64Array , u64 > ( this , fn ) ;
1196
1228
}
1197
1229
1230
+ findLastIndex ( fn : ( value : u64 , index : i32 , self : Uint64Array ) => bool ) : i32 {
1231
+ return FIND_LAST_INDEX < Uint64Array , u64 > ( this , fn ) ;
1232
+ }
1233
+
1198
1234
some ( fn : ( value : u64 , index : i32 , self : Uint64Array ) => bool ) : bool {
1199
1235
return SOME < Uint64Array , u64 > ( this , fn ) ;
1200
1236
}
@@ -1331,6 +1367,10 @@ export class Float32Array extends ArrayBufferView {
1331
1367
return FIND_INDEX < Float32Array , f32 > ( this , fn ) ;
1332
1368
}
1333
1369
1370
+ findLastIndex ( fn : ( value : f32 , index : i32 , self : Float32Array ) => bool ) : i32 {
1371
+ return FIND_LAST_INDEX < Float32Array , f32 > ( this , fn ) ;
1372
+ }
1373
+
1334
1374
some ( fn : ( value : f32 , index : i32 , self : Float32Array ) => bool ) : bool {
1335
1375
return SOME < Float32Array , f32 > ( this , fn ) ;
1336
1376
}
@@ -1467,6 +1507,10 @@ export class Float64Array extends ArrayBufferView {
1467
1507
return FIND_INDEX < Float64Array , f64 > ( this , fn ) ;
1468
1508
}
1469
1509
1510
+ findLastIndex ( fn : ( value : f64 , index : i32 , self : Float64Array ) => bool ) : i32 {
1511
+ return FIND_LAST_INDEX < Float64Array , f64 > ( this , fn ) ;
1512
+ }
1513
+
1470
1514
some ( fn : ( value : f64 , index : i32 , self : Float64Array ) => bool ) : bool {
1471
1515
return SOME < Float64Array , f64 > ( this , fn ) ;
1472
1516
}
@@ -1508,15 +1552,15 @@ function FILL<TArray extends ArrayBufferView, T extends number>(
1508
1552
start : i32 ,
1509
1553
end : i32
1510
1554
) : TArray {
1511
- var dataStart = array . dataStart ;
1555
+ var ptr = array . dataStart ;
1512
1556
var len = array . length ;
1513
1557
start = start < 0 ? max ( len + start , 0 ) : min ( start , len ) ;
1514
1558
end = end < 0 ? max ( len + end , 0 ) : min ( end , len ) ;
1515
1559
if ( sizeof < T > ( ) == 1 ) {
1516
- if ( start < end ) memory . fill ( dataStart + < usize > start , < u8 > value , < usize > ( end - start ) ) ;
1560
+ if ( start < end ) memory . fill ( ptr + < usize > start , < u8 > value , < usize > ( end - start ) ) ;
1517
1561
} else {
1518
1562
for ( ; start < end ; ++ start ) {
1519
- store < T > ( dataStart + ( < usize > start << alignof < T > ( ) ) , value ) ;
1563
+ store < T > ( ptr + ( < usize > start << alignof < T > ( ) ) , value ) ;
1520
1564
}
1521
1565
}
1522
1566
return array ;
@@ -1572,7 +1616,7 @@ function COPY_WITHIN<TArray extends ArrayBufferView, T>(
1572
1616
end : i32
1573
1617
) : TArray {
1574
1618
var len = array . length ;
1575
- var dataStart = array . dataStart ;
1619
+ var ptr = array . dataStart ;
1576
1620
1577
1621
end = min < i32 > ( end , len ) ;
1578
1622
var to = target < 0 ? max ( len + target , 0 ) : min ( target , len ) ;
@@ -1581,8 +1625,8 @@ function COPY_WITHIN<TArray extends ArrayBufferView, T>(
1581
1625
var count = min ( last - from , len - to ) ;
1582
1626
1583
1627
memory . copy (
1584
- dataStart + ( < usize > to << alignof < T > ( ) ) ,
1585
- dataStart + ( < usize > from << alignof < T > ( ) ) ,
1628
+ ptr + ( < usize > to << alignof < T > ( ) ) ,
1629
+ ptr + ( < usize > from << alignof < T > ( ) ) ,
1586
1630
< usize > count << alignof < T > ( )
1587
1631
) ;
1588
1632
return array ;
@@ -1595,9 +1639,9 @@ function REDUCE<TArray extends ArrayBufferView, T, TRet>(
1595
1639
fn : ( accumulator : TRet , value : T , index : i32 , array : TArray ) => TRet ,
1596
1640
initialValue : TRet
1597
1641
) : TRet {
1598
- var dataStart = array . dataStart ;
1642
+ var ptr = array . dataStart ;
1599
1643
for ( let i = 0 , k = array . length ; i < k ; i ++ ) {
1600
- initialValue = fn ( initialValue , load < T > ( dataStart + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ;
1644
+ initialValue = fn ( initialValue , load < T > ( ptr + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ;
1601
1645
}
1602
1646
return initialValue ;
1603
1647
}
@@ -1609,9 +1653,9 @@ function REDUCE_RIGHT<TArray extends ArrayBufferView, T, TRet>(
1609
1653
fn : ( accumulator : TRet , value : T , index : i32 , array : TArray ) => TRet ,
1610
1654
initialValue : TRet
1611
1655
) : TRet {
1612
- var dataStart = array . dataStart ;
1656
+ var ptr = array . dataStart ;
1613
1657
for ( let i = array . length - 1 ; i >= 0 ; i -- ) {
1614
- initialValue = fn ( initialValue , load < T > ( dataStart + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ;
1658
+ initialValue = fn ( initialValue , load < T > ( ptr + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ;
1615
1659
}
1616
1660
return initialValue ;
1617
1661
}
@@ -1623,15 +1667,15 @@ function MAP<TArray extends ArrayBufferView, T>(
1623
1667
fn : ( value : T , index : i32 , self : TArray ) => T ,
1624
1668
) : TArray {
1625
1669
var len = array . length ;
1626
- var dataStart = array . dataStart ;
1670
+ var ptr = array . dataStart ;
1627
1671
1628
1672
var byteLength = len << alignof < T > ( ) ;
1629
1673
var out = changetype < TArray > ( __new ( offsetof < TArray > ( ) , idof < TArray > ( ) ) ) ;
1630
1674
var buf = changetype < ArrayBuffer > ( __new ( byteLength , idof < ArrayBuffer > ( ) ) ) ;
1631
1675
for ( let i = 0 ; i < len ; i ++ ) {
1632
1676
store < T > (
1633
1677
changetype < usize > ( buf ) + ( < usize > i << alignof < T > ( ) ) ,
1634
- fn ( load < T > ( dataStart + ( < usize > i << alignof < T > ( ) ) ) , i , array )
1678
+ fn ( load < T > ( ptr + ( < usize > i << alignof < T > ( ) ) ) , i , array )
1635
1679
) ;
1636
1680
}
1637
1681
store < usize > ( changetype < usize > ( out ) , changetype < usize > ( buf ) , offsetof < TArray > ( "buffer" ) ) ;
@@ -1677,9 +1721,22 @@ function FIND_INDEX<TArray extends ArrayBufferView, T>(
1677
1721
array : TArray ,
1678
1722
fn : ( value : T , index : i32 , array : TArray ) => bool ,
1679
1723
) : i32 {
1680
- var dataStart = array . dataStart ;
1724
+ var ptr = array . dataStart ;
1681
1725
for ( let i = 0 , k = array . length ; i < k ; i ++ ) {
1682
- if ( fn ( load < T > ( dataStart + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ) return i ;
1726
+ if ( fn ( load < T > ( ptr + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ) return i ;
1727
+ }
1728
+ return - 1 ;
1729
+ }
1730
+
1731
+ // @ts -ignore: decorator
1732
+ @inline
1733
+ function FIND_LAST_INDEX < TArray extends ArrayBufferView , T > (
1734
+ array : TArray ,
1735
+ fn : ( value : T , index : i32 , array : TArray ) => bool ,
1736
+ ) : i32 {
1737
+ var ptr = array . dataStart ;
1738
+ for ( let i = array . length - 1 ; i >= 0 ; -- i ) {
1739
+ if ( fn ( load < T > ( ptr + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ) return i ;
1683
1740
}
1684
1741
return - 1 ;
1685
1742
}
@@ -1693,11 +1750,11 @@ function INCLUDES<TArray extends ArrayBufferView, T>(
1693
1750
) : bool {
1694
1751
if ( isFloat < T > ( ) ) {
1695
1752
let index : isize = fromIndex ;
1696
- let length : isize = array . length ;
1697
- if ( length == 0 || index >= length ) return false ;
1698
- if ( index < 0 ) index = max ( length + index , 0 ) ;
1753
+ let len : isize = array . length ;
1754
+ if ( len == 0 || index >= len ) return false ;
1755
+ if ( index < 0 ) index = max ( len + index , 0 ) ;
1699
1756
let dataStart = array . dataStart ;
1700
- while ( index < length ) {
1757
+ while ( index < len ) {
1701
1758
let elem = load < T > ( dataStart + ( index << alignof < T > ( ) ) ) ;
1702
1759
// @ts -ignore
1703
1760
if ( elem == searchElement || isNaN ( elem ) & isNaN ( searchElement ) ) return true ;
@@ -1717,11 +1774,11 @@ function INDEX_OF<TArray extends ArrayBufferView, T>(
1717
1774
fromIndex : i32 ,
1718
1775
) : i32 {
1719
1776
var index : isize = fromIndex ;
1720
- var length : isize = array . length ;
1721
- if ( length == 0 || index >= length ) return - 1 ;
1722
- if ( index < 0 ) index = max ( length + index , 0 ) ;
1777
+ var len : isize = array . length ;
1778
+ if ( len == 0 || index >= len ) return - 1 ;
1779
+ if ( index < 0 ) index = max ( len + index , 0 ) ;
1723
1780
var dataStart = array . dataStart ;
1724
- while ( index < length ) {
1781
+ while ( index < len ) {
1725
1782
if ( load < T > ( dataStart + ( index << alignof < T > ( ) ) ) == searchElement ) return < i32 > index ;
1726
1783
++ index ;
1727
1784
}
@@ -1736,10 +1793,10 @@ function LAST_INDEX_OF<TArray extends ArrayBufferView, T>(
1736
1793
fromIndex : i32 ,
1737
1794
) : i32 {
1738
1795
var index : isize = fromIndex ;
1739
- var length : isize = array . length ;
1740
- if ( length == 0 ) return - 1 ;
1741
- if ( index < 0 ) index = length + index ; // no need to clamp
1742
- else if ( index >= length ) index = length - 1 ;
1796
+ var len : isize = array . length ;
1797
+ if ( len == 0 ) return - 1 ;
1798
+ if ( index < 0 ) index = len + index ; // no need to clamp
1799
+ else if ( index >= len ) index = len - 1 ;
1743
1800
var dataStart = array . dataStart ;
1744
1801
while ( index >= 0 ) {
1745
1802
if ( load < T > ( dataStart + ( index << alignof < T > ( ) ) ) == searchElement ) return < i32 > index ;
@@ -1754,9 +1811,9 @@ function SOME<TArray extends ArrayBufferView, T>(
1754
1811
array : TArray ,
1755
1812
fn : ( value : T , index : i32 , array : TArray ) => bool ,
1756
1813
) : bool {
1757
- var dataStart = array . dataStart ;
1814
+ var ptr = array . dataStart ;
1758
1815
for ( let i = 0 , k = array . length ; i < k ; i ++ ) {
1759
- if ( fn ( load < T > ( dataStart + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ) return true ;
1816
+ if ( fn ( load < T > ( ptr + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ) return true ;
1760
1817
}
1761
1818
return false ;
1762
1819
}
@@ -1767,9 +1824,9 @@ function EVERY<TArray extends ArrayBufferView, T>(
1767
1824
array : TArray ,
1768
1825
fn : ( value : T , index : i32 , array : TArray ) => bool ,
1769
1826
) : bool {
1770
- var dataStart = array . dataStart ;
1827
+ var ptr = array . dataStart ;
1771
1828
for ( let i = 0 , k = array . length ; i < k ; i ++ ) {
1772
- if ( fn ( load < T > ( dataStart + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ) continue ;
1829
+ if ( fn ( load < T > ( ptr + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ) continue ;
1773
1830
return false ;
1774
1831
}
1775
1832
return true ;
@@ -1781,19 +1838,19 @@ function FOREACH<TArray extends ArrayBufferView, T>(
1781
1838
array : TArray ,
1782
1839
fn : ( value : T , index : i32 , array : TArray ) => void ,
1783
1840
) : void {
1784
- var dataStart = array . dataStart ;
1841
+ var ptr = array . dataStart ;
1785
1842
for ( let i = 0 , k = array . length ; i < k ; i ++ ) {
1786
- fn ( load < T > ( dataStart + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ;
1843
+ fn ( load < T > ( ptr + ( < usize > i << alignof < T > ( ) ) ) , i , array ) ;
1787
1844
}
1788
1845
}
1789
1846
1790
1847
// @ts -ignore: decorator
1791
1848
@inline
1792
1849
function REVERSE < TArray extends ArrayBufferView , T > ( array : TArray ) : TArray {
1793
- var dataStart = array . dataStart ;
1850
+ var ptr = array . dataStart ;
1794
1851
for ( let front : usize = 0 , back : usize = array . length - 1 ; front < back ; ++ front , -- back ) {
1795
- let frontPtr = dataStart + ( front << alignof < T > ( ) ) ;
1796
- let backPtr = dataStart + ( back << alignof < T > ( ) ) ;
1852
+ let frontPtr = ptr + ( front << alignof < T > ( ) ) ;
1853
+ let backPtr = ptr + ( back << alignof < T > ( ) ) ;
1797
1854
let temp = load < T > ( frontPtr ) ;
1798
1855
store < T > ( frontPtr , load < T > ( backPtr ) ) ;
1799
1856
store < T > ( backPtr , temp ) ;
@@ -1806,16 +1863,16 @@ function REVERSE<TArray extends ArrayBufferView, T>(array: TArray): TArray {
1806
1863
function WRAP < TArray extends ArrayBufferView , T > (
1807
1864
buffer : ArrayBuffer ,
1808
1865
byteOffset : i32 = 0 ,
1809
- length : i32 = - 1
1866
+ len : i32 = - 1
1810
1867
) : TArray {
1811
1868
var byteLength : i32 ;
1812
1869
var bufferByteLength = buffer . byteLength ;
1813
1870
const mask : u32 = sizeof < T > ( ) - 1 ;
1814
1871
if ( i32 ( < u32 > byteOffset > < u32 > bufferByteLength ) | ( byteOffset & mask ) ) {
1815
1872
throw new RangeError ( E_INDEXOUTOFRANGE ) ;
1816
1873
}
1817
- if ( length < 0 ) {
1818
- if ( length == - 1 ) {
1874
+ if ( len < 0 ) {
1875
+ if ( len == - 1 ) {
1819
1876
if ( bufferByteLength & mask ) {
1820
1877
throw new RangeError ( E_INVALIDLENGTH ) ;
1821
1878
}
@@ -1824,7 +1881,7 @@ function WRAP<TArray extends ArrayBufferView, T>(
1824
1881
throw new RangeError ( E_INVALIDLENGTH ) ;
1825
1882
}
1826
1883
} else {
1827
- byteLength = length << alignof < T > ( ) ;
1884
+ byteLength = len << alignof < T > ( ) ;
1828
1885
if ( byteOffset + byteLength > bufferByteLength ) {
1829
1886
throw new RangeError ( E_INVALIDLENGTH ) ;
1830
1887
}
0 commit comments