12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /**
- * 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 TokenColumn from '../../common/text/column/token'
- import { Tokens } from '../../common/text/tokenizer'
- import * as Data from '../data-model'
- import { parseInt as fastParseInt, parseFloat as fastParseFloat } from '../../common/text/number-parser'
- export default function CifTextField(tokens: Tokens, rowCount: number): Data.Field {
- const { data, indices } = tokens;
- const str: Data.Field['str'] = row => {
- const ret = data.substring(indices[2 * row], indices[2 * row + 1]);
- if (ret === '.' || ret === '?') return '';
- return ret;
- };
- const int: Data.Field['int'] = row => {
- return fastParseInt(data, indices[2 * row], indices[2 * row + 1]) || 0;
- };
- const float: Data.Field['float'] = row => {
- return fastParseFloat(data, indices[2 * row], indices[2 * row + 1]) || 0;
- };
- const list: Data.Field['list'] = <T extends string|number>(row: number) => {
- const ret = data.substring(indices[2 * row], indices[2 * row + 1]);
- if (ret === '.' || ret === '?') return [];
- return ret.split(',') as T[];
- };
- const valueKind: Data.Field['valueKind'] = row => {
- const s = indices[2 * row];
- if (indices[2 * row + 1] - s !== 1) return Column.ValueKind.Present;
- const v = data.charCodeAt(s);
- if (v === 46 /* . */) return Column.ValueKind.NotPresent;
- if (v === 63 /* ? */) return Column.ValueKind.Unknown;
- return Column.ValueKind.Present;
- };
- return {
- '@array': void 0,
- isDefined: true,
- rowCount,
- str,
- int,
- float,
- list,
- valueKind,
- areValuesEqual: TokenColumn.areValuesEqualProvider(tokens),
- toStringArray: params => ColumnHelpers.createAndFillArray(rowCount, str, params),
- toIntArray: params => ColumnHelpers.createAndFillArray(rowCount, int, params),
- toFloatArray: params => ColumnHelpers.createAndFillArray(rowCount, float, params),
- toListArray: params => ColumnHelpers.createAndFillArray(rowCount, list, params)
- }
- }
|