molstar
Version:
A comprehensive macromolecular library.
50 lines (49 loc) • 2.04 kB
JavaScript
/**
* 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 { ColumnHelpers } from '../../../../mol-data/db';
import { decode } from '../../../common/binary-cif';
import { parseInt as fastParseInt, parseFloat as fastParseFloat } from '../../common/text/number-parser';
export function Field(column) {
const mask = column.mask ? decode(column.mask) : void 0;
const data = decode(column.data);
const isNumeric = ColumnHelpers.isTypedArray(data);
const str = isNumeric
? mask
? row => mask[row] === 0 /* Column.ValueKinds.Present */ ? '' + data[row] : ''
: row => '' + data[row]
: mask
? row => mask[row] === 0 /* Column.ValueKinds.Present */ ? data[row] : ''
: row => data[row];
const int = isNumeric
? row => data[row]
: row => { const v = data[row]; return fastParseInt(v, 0, v.length); };
const float = isNumeric
? row => data[row]
: row => { const v = data[row]; return fastParseFloat(v, 0, v.length); };
const valueKind = mask
? row => mask[row]
: row => 0 /* Column.ValueKinds.Present */;
const rowCount = data.length;
return {
__array: data,
binaryEncoding: column.data.encoding,
isDefined: true,
rowCount,
str,
int,
float,
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)
};
}