diff --git a/src/mol-data/db/table.ts b/src/mol-data/db/table.ts index 15fd6aef229002f97e13fde5f609131cb19fa245..3573c7bd604a7ce5bf5877efbd1a53a89d38bcec 100644 --- a/src/mol-data/db/table.ts +++ b/src/mol-data/db/table.ts @@ -101,6 +101,14 @@ namespace Table { return ret as Table<R>; } + export function pick<S extends R, R extends Schema>(table: Table<S>, schema: R, test: (i: number) => boolean) { + const _view: number[] = [] + for (let i = 0, il = table._rowCount; i < il; ++i) { + if (test(i)) _view.push(i) + } + return view(table, schema, _view) + } + export function window<S extends R, R extends Schema>(table: Table<S>, schema: R, start: number, end: number) { if (start === 0 && end === table._rowCount) return table; const ret = Object.create(null); @@ -194,6 +202,13 @@ namespace Table { return row; } + /** Pick the first row for which `test` evaluates to true */ + export function pickRow<S extends Schema>(table: Table<S>, test: (i: number) => boolean) { + for (let i = 0, il = table._rowCount; i < il; ++i) { + if (test(i)) return getRow(table, i) + } + } + export function getRows<S extends Schema>(table: Table<S>) { const ret: Row<S>[] = []; const { _rowCount: c } = table;