@@ -1061,10 +1061,10 @@ namespace ts {
1061
1061
/**
1062
1062
* Stable sort of an array. Elements equal to each other maintain their relative position in the array.
1063
1063
*/
1064
- export function stableSort < T > ( array : ReadonlyArray < T > , comparer : Comparer < T > ) {
1064
+ export function stableSort < T > ( array : ReadonlyArray < T > , comparer : Comparer < T > ) : SortedReadonlyArray < T > {
1065
1065
const indices = array . map ( ( _ , i ) => i ) ;
1066
1066
stableSortIndices ( array , indices , comparer ) ;
1067
- return indices . map ( i => array [ i ] ) ;
1067
+ return indices . map ( i => array [ i ] ) as SortedArray < T > as SortedReadonlyArray < T > ;
1068
1068
}
1069
1069
1070
1070
export function rangeEquals < T > ( array1 : ReadonlyArray < T > , array2 : ReadonlyArray < T > , pos : number , end : number ) {
@@ -1156,7 +1156,7 @@ namespace ts {
1156
1156
* @param offset An offset into `array` at which to start the search.
1157
1157
*/
1158
1158
export function binarySearch < T , U > ( array : ReadonlyArray < T > , value : T , keySelector : ( v : T ) => U , keyComparer : Comparer < U > , offset ?: number ) : number {
1159
- return some ( array ) ? binarySearchKey ( array , keySelector ( value ) , keySelector , keyComparer , offset ) : - 1 ;
1159
+ return binarySearchKey ( array , keySelector ( value ) , keySelector , keyComparer , offset ) ;
1160
1160
}
1161
1161
1162
1162
/**
@@ -2167,74 +2167,4 @@ namespace ts {
2167
2167
export function fill < T > ( length : number , cb : ( index : number ) => T ) : T [ ] {
2168
2168
return new Array ( length ) . fill ( 0 ) . map ( ( _ , i ) => cb ( i ) ) ;
2169
2169
}
2170
-
2171
- /**
2172
- * A list of sorted and unique values. Optimized for best performance when items are added
2173
- * in the sort order.
2174
- */
2175
- export class SortedUniqueList < T > implements Push < T > {
2176
- private relationalComparer : ( a : T , b : T ) => Comparison ;
2177
- private equalityComparer : ( a : T , b : T ) => boolean ;
2178
- private sortedAndUnique = true ;
2179
- private copyOnWrite = false ;
2180
- private unsafeArray : T [ ] = [ ] ;
2181
- private unsafeLast : T | undefined = undefined ;
2182
-
2183
- constructor ( relationalComparer : Comparer < T > , equalityComparer : EqualityComparer < T > ) {
2184
- this . relationalComparer = relationalComparer ;
2185
- this . equalityComparer = equalityComparer ;
2186
- }
2187
-
2188
- get size ( ) {
2189
- return this . unsafeArray . length ;
2190
- }
2191
-
2192
- get last ( ) {
2193
- this . ensureSortedAndUnique ( ) ;
2194
- return this . unsafeLast === undefined
2195
- ? this . unsafeLast = lastOrUndefined ( this . unsafeArray )
2196
- : this . unsafeLast ;
2197
- }
2198
-
2199
- push ( ...values : T [ ] ) {
2200
- for ( const value of values ) {
2201
- if ( this . sortedAndUnique ) {
2202
- const last = this . last ;
2203
- if ( last === undefined || this . relationalComparer ( value , last ) > 0 ) {
2204
- this . unsafeAdd ( value , /*sortedAndUnique*/ true ) ;
2205
- continue ;
2206
- }
2207
- if ( this . equalityComparer ( value , last ) ) {
2208
- continue ;
2209
- }
2210
- }
2211
- this . unsafeAdd ( value , /*sortedAndUnique*/ false ) ;
2212
- }
2213
- }
2214
-
2215
- toArray ( ) : ReadonlyArray < T > {
2216
- this . ensureSortedAndUnique ( ) ;
2217
- this . copyOnWrite = true ;
2218
- return this . unsafeArray ;
2219
- }
2220
-
2221
- private unsafeAdd ( value : T , sortedAndUnique : boolean ) {
2222
- if ( this . copyOnWrite || this . unsafeArray === emptyArray ) {
2223
- this . unsafeArray = this . unsafeArray . slice ( ) ;
2224
- this . copyOnWrite = false ;
2225
- }
2226
-
2227
- this . unsafeArray . push ( value ) ;
2228
- this . unsafeLast = sortedAndUnique ? value : undefined ;
2229
- this . sortedAndUnique = sortedAndUnique ;
2230
- }
2231
-
2232
- private ensureSortedAndUnique ( ) {
2233
- if ( ! this . sortedAndUnique ) {
2234
- this . unsafeArray = deduplicateSorted ( stableSort ( this . unsafeArray , this . relationalComparer ) as any as SortedReadonlyArray < T > , this . equalityComparer ) as any as T [ ] ;
2235
- this . unsafeLast = undefined ;
2236
- this . sortedAndUnique = true ;
2237
- }
2238
- }
2239
- }
2240
2170
}
0 commit comments