@@ -798,6 +798,10 @@ export class DataSelection {
798
798
return this . deeptable . highest_known_ix ;
799
799
}
800
800
801
+
802
+ get ( i : number | undefined , returnQid : false ) : StructRowProxy | undefined ;
803
+ get ( i : number | undefined , returnQid : true ) : [ number , number ] | undefined ;
804
+
801
805
/**
802
806
*
803
807
* Returns the nth element in the selection. This is a bit tricky because
@@ -807,8 +811,9 @@ export class DataSelection {
807
811
* tile until we find the nth match.
808
812
*
809
813
* @param i the index of the row to get. If less than zero, will return
814
+ * @param returnQid if true, returns a tuple of [tile index, row index] instead of the row data
810
815
*/
811
- get ( i : number | undefined = undefined ) : StructRowProxy | undefined {
816
+ get ( i : number | undefined = undefined , returnQid : boolean = false ) : StructRowProxy | [ number , number ] | undefined {
812
817
if ( i === undefined ) {
813
818
i = this . cursor ;
814
819
}
@@ -1041,7 +1046,6 @@ export class SortedDataSelection extends DataSelection {
1041
1046
sortOperation : ( a : StructRowProxy ) => number ,
1042
1047
order : 'ascending' | 'descending' = 'ascending' ,
1043
1048
tKey : string | undefined = undefined ,
1044
- name : string | undefined = undefined ,
1045
1049
) : Promise < SortedDataSelection > {
1046
1050
const key = tKey || Math . random ( ) . toFixed ( 10 ) . slice ( 2 ) ;
1047
1051
const newer = new SortedDataSelection (
@@ -1068,7 +1072,7 @@ export class SortedDataSelection extends DataSelection {
1068
1072
newer . tiles = await Promise . all ( withSort ) ;
1069
1073
newer . selectionSize = newer . tiles . reduce ( ( sum , t ) => sum + t . matchCount , 0 ) ;
1070
1074
newer . evaluationSetSize = newer . tiles . reduce (
1071
- ( sum , t ) => sum + t . tile . metadata . nPoints ,
1075
+ ( sum : number , t : SelectionTile ) : number => sum + t . tile . metadata . nPoints ,
1072
1076
0 ,
1073
1077
) ;
1074
1078
return newer ;
@@ -1108,11 +1112,15 @@ export class SortedDataSelection extends DataSelection {
1108
1112
} ;
1109
1113
}
1110
1114
1115
+ get ( i : number | undefined , returnQid : false ) : StructRowProxy | undefined ;
1116
+ get ( i : number | undefined , returnQid : true ) : [ number , number ] | undefined ;
1117
+
1118
+
1111
1119
/**
1112
1120
* Returns the k-th element in the sorted selection.
1113
1121
* This implementation uses Quickselect with a pivot selected from actual data.
1114
1122
*/
1115
- get ( k : number ) : StructRowProxy | undefined {
1123
+ get ( k : number | undefined = undefined , returnQid : boolean = false ) : StructRowProxy | [ number , number ] | undefined {
1116
1124
if ( k >= this . selectionSize || k < - this . selectionSize ) {
1117
1125
return undefined ;
1118
1126
}
@@ -1125,6 +1133,9 @@ export class SortedDataSelection extends DataSelection {
1125
1133
const actualK = this . order === 'ascending' ? k : this . selectionSize - k - 1 ;
1126
1134
// Implement Quickselect over the combined data
1127
1135
const result = quickSelect ( actualK , this . tiles , this . key , true ) ;
1136
+ if ( returnQid ) {
1137
+ return [ result . tix , result . rix ] ;
1138
+ }
1128
1139
return result ? result . row : undefined ;
1129
1140
}
1130
1141
@@ -1222,7 +1233,7 @@ export class TileSorter
1222
1233
continue ;
1223
1234
}
1224
1235
// All values left of pointer are less than targetValue.
1225
- let pointer ;
1236
+ let pointer : number ;
1226
1237
if ( this . order === 'ascending' ) {
1227
1238
pointer = bisectLeft ( rawSortInfo . values , sortValue ) ;
1228
1239
} else {
@@ -1324,6 +1335,7 @@ interface QuickSortTile {
1324
1335
type QuickSelectResult = {
1325
1336
row : StructRowProxy ;
1326
1337
tix : number ;
1338
+ rix : number ;
1327
1339
// Needed if you want to set pointers
1328
1340
sortIndex : number ;
1329
1341
sortValue : number ;
@@ -1361,6 +1373,7 @@ function quickSelect(
1361
1373
sortIndex : start ,
1362
1374
sortValue : values [ start ] ,
1363
1375
tix : t . tile . tix ,
1376
+ rix : recordIndex ,
1364
1377
} ;
1365
1378
}
1366
1379
}
@@ -1459,6 +1472,7 @@ function selectInEqualTiles(
1459
1472
return {
1460
1473
row : t . tile . record_batch . get ( recordIndex ) ,
1461
1474
tix : t . tile . tix ,
1475
+ rix : recordIndex ,
1462
1476
sortIndex : idxInTile ,
1463
1477
sortValue : values [ idxInTile ] ,
1464
1478
} ;
0 commit comments