@@ -8,12 +8,12 @@ import {
88
99import {
1010 insertionSort ,
11- weakHeapSort ,
12- defaultComparator
11+ weakHeapSort
1312} from "./array" ;
1413
1514/** Typed array base class. Not a global object. */
1615export abstract class TypedArray < T > {
16+ [ key : number ] : T ; // compatibility only
1717
1818 readonly buffer : ArrayBuffer ;
1919 readonly byteOffset : i32 ;
@@ -58,64 +58,73 @@ export abstract class TypedArray<T> {
5858 }
5959
6060 // copyWithin(target: i32, start: i32, end: i32 = this.length): this
61+ }
6162
62- fill ( value : NATIVE < T > , start : i32 = 0 , end : i32 = i32 . MAX_VALUE ) : this /* ! */ {
63- var buffer = this . buffer ;
64- var byteOffset = this . byteOffset ;
65- var len = this . length ;
66- start = start < 0 ? max ( len + start , 0 ) : min ( start , len ) ;
67- end = end < 0 ? max ( len + end , 0 ) : min ( end , len ) ;
68- if ( sizeof < T > ( ) == 1 ) {
69- if ( start < end ) {
70- memory . fill (
71- changetype < usize > ( buffer ) + start + byteOffset + AB_HEADER_SIZE ,
72- < u8 > value ,
73- < usize > ( end - start )
74- ) ;
75- }
76- } else {
77- for ( ; start < end ; ++ start ) {
78- STORE_OFFSET < T , NATIVE < T > > ( buffer , start , value , byteOffset ) ;
79- }
63+ @inline
64+ export function FILL < TArray extends TypedArray < T > , T > (
65+ array : TArray ,
66+ value : NATIVE < T > ,
67+ start : i32 ,
68+ end : i32
69+ ) : TArray {
70+ var buffer = array . buffer ;
71+ var byteOffset = array . byteOffset ;
72+ var len = array . length ;
73+ start = start < 0 ? max ( len + start , 0 ) : min ( start , len ) ;
74+ end = end < 0 ? max ( len + end , 0 ) : min ( end , len ) ;
75+ if ( sizeof < T > ( ) == 1 ) {
76+ if ( start < end ) {
77+ memory . fill (
78+ changetype < usize > ( buffer ) + start + byteOffset + AB_HEADER_SIZE ,
79+ < u8 > value ,
80+ < usize > ( end - start )
81+ ) ;
82+ }
83+ } else {
84+ for ( ; start < end ; ++ start ) {
85+ STORE_OFFSET < T , NATIVE < T > > ( buffer , start , value , byteOffset ) ;
8086 }
81- return this ;
8287 }
88+ return array ;
89+ }
8390
84- sort ( comparator : ( a : T , b : T ) => i32 = defaultComparator < T > ( ) ) : this /* ! */ {
85- var byteOffset = this . byteOffset ;
86- var length = this . length ;
87- if ( length <= 1 ) return this ;
88- var buffer = this . buffer ;
89- if ( length == 2 ) {
90- let a = LOAD_OFFSET < T > ( buffer , 1 , byteOffset ) ;
91- let b = LOAD_OFFSET < T > ( buffer , 0 , byteOffset ) ;
92- if ( comparator ( a , b ) < 0 ) {
93- STORE_OFFSET < T > ( buffer , 1 , b , byteOffset ) ;
94- STORE_OFFSET < T > ( buffer , 0 , a , byteOffset ) ;
95- }
96- return this ;
91+ @inline
92+ export function SORT < TArray extends TypedArray < T > , T > (
93+ array : TArray ,
94+ comparator : ( a : T , b : T ) => i32
95+ ) : TArray {
96+ var byteOffset = array . byteOffset ;
97+ var length = array . length ;
98+ if ( length <= 1 ) return array ;
99+ var buffer = array . buffer ;
100+ if ( length == 2 ) {
101+ let a = LOAD_OFFSET < T > ( buffer , 1 , byteOffset ) ;
102+ let b = LOAD_OFFSET < T > ( buffer , 0 , byteOffset ) ;
103+ if ( comparator ( a , b ) < 0 ) {
104+ STORE_OFFSET < T > ( buffer , 1 , b , byteOffset ) ;
105+ STORE_OFFSET < T > ( buffer , 0 , a , byteOffset ) ;
97106 }
98-
99- if ( isReference < T > ( ) ) {
100- // TODO replace this to faster stable sort (TimSort) when it implemented
107+ return array ;
108+ }
109+ if ( isReference < T > ( ) ) {
110+ // TODO replace this to faster stable sort (TimSort) when it implemented
111+ insertionSort < T > ( buffer , byteOffset , length , comparator ) ;
112+ return array ;
113+ } else {
114+ if ( length < 256 ) {
101115 insertionSort < T > ( buffer , byteOffset , length , comparator ) ;
102- return this ;
103116 } else {
104- if ( length < 256 ) {
105- insertionSort < T > ( buffer , byteOffset , length , comparator ) ;
106- } else {
107- weakHeapSort < T > ( buffer , byteOffset , length , comparator ) ;
108- }
109- return this ;
117+ weakHeapSort < T > ( buffer , byteOffset , length , comparator ) ;
110118 }
119+ return array ;
111120 }
112121}
113122
114123@inline
115- export function SUBARRAY < TArray , T > (
124+ export function SUBARRAY < TArray extends TypedArray < T > , T > (
116125 array : TArray ,
117- begin : i32 = 0 ,
118- end : i32 = i32 . MAX_VALUE
126+ begin : i32 ,
127+ end : i32
119128) : TArray {
120129 var length = < i32 > array . length ;
121130 if ( begin < 0 ) begin = max ( length + begin , 0 ) ;
@@ -130,7 +139,7 @@ export function SUBARRAY<TArray, T>(
130139}
131140
132141@inline
133- export function REDUCE < TArray , T , TRet > (
142+ export function REDUCE < TArray extends TypedArray < T > , T , TRet > (
134143 array : TArray ,
135144 callbackfn : ( accumulator : TRet , value : T , index : i32 , array : TArray ) => TRet ,
136145 initialValue : TRet
@@ -140,7 +149,7 @@ export function REDUCE<TArray, T, TRet>(
140149 while ( index != length ) {
141150 initialValue = callbackfn (
142151 initialValue ,
143- unchecked ( array [ index ] ) , // tslint:disable-line
152+ unchecked ( array [ index ] ) ,
144153 index ,
145154 array ,
146155 ) ;
@@ -150,7 +159,7 @@ export function REDUCE<TArray, T, TRet>(
150159}
151160
152161@inline
153- export function REDUCE_RIGHT < TArray , T , TRet > (
162+ export function REDUCE_RIGHT < TArray extends TypedArray < T > , T , TRet > (
154163 array : TArray ,
155164 callbackfn : ( accumulator : TRet , value : T , index : i32 , array : TArray ) => TRet ,
156165 initialValue : TRet
@@ -160,7 +169,7 @@ export function REDUCE_RIGHT<TArray, T, TRet>(
160169 while ( index != length ) {
161170 initialValue = callbackfn (
162171 initialValue ,
163- unchecked ( array [ index ] ) , // tslint:disable-line
172+ unchecked ( array [ index ] ) ,
164173 index ,
165174 array ,
166175 ) ;
0 commit comments