123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /**
- * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author David Sehnal <david.sehnal@gmail.com>
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
- import { Column, ColumnHelpers } from 'mol-data/db'
- import * as Data from '../data-model'
- import { EncodedColumn, decode } from '../../../common/binary-cif'
- import { parseInt as fastParseInt, parseFloat as fastParseFloat } from '../../common/text/number-parser'
- export default function Field(column: EncodedColumn): Data.Field {
- const mask = column.mask ? decode(column.mask) as number[] : void 0;
- const data = decode(column.data);
- const isNumeric = ColumnHelpers.isTypedArray(data);
- const str: Data.Field['str'] = isNumeric
- ? mask
- ? row => mask[row] === Column.ValueKind.Present ? '' + data[row] : ''
- : row => '' + data[row]
- : mask
- ? row => mask[row] === Column.ValueKind.Present ? data[row] : ''
- : row => data[row];
- const int: Data.Field['int'] = isNumeric
- ? row => data[row]
- : row => { const v = data[row]; return fastParseInt(v, 0, v.length); };
- const float: Data.Field['float'] = isNumeric
- ? row => data[row]
- : row => { const v = data[row]; return fastParseFloat(v, 0, v.length); };
- const list: Data.Field['list'] = mask
- ? row => mask[row] === Column.ValueKind.Present ? data[row] : []
- : row => data[row];
- const valueKind: Data.Field['valueKind'] = mask
- ? row => mask[row]
- : row => Column.ValueKind.Present;
- const rowCount = data.length;
- return {
- '@array': data,
- isDefined: true,
- rowCount,
- str,
- int,
- float,
- list,
- valueKind,
- areValuesEqual: (rowA, rowB) => data[rowA] === data[rowB],
- toStringArray: params => ColumnHelpers.createAndFillArray(rowCount, str, params),
- toIntArray: isNumeric
- ? params => ColumnHelpers.typedArrayWindow(data, params)
- : params => ColumnHelpers.createAndFillArray(rowCount, int, params),
- toFloatArray: isNumeric
- ? params => ColumnHelpers.typedArrayWindow(data, params)
- : params => ColumnHelpers.createAndFillArray(rowCount, float, params),
- toListArray: params => ColumnHelpers.createAndFillArray(rowCount, list, params)
- };
- }
|