/** * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal * @author Alexander Rose */ import { Iterator } from '../../../mol-data/iterator.js'; import { Column, Table, Database, DatabaseCollection } from '../../../mol-data/db.js'; import { Encoder as EncoderBase } from '../encoder.js'; import { ArrayEncoder, ArrayEncoding } from '../../common/binary-cif.js'; import { BinaryEncodingProvider } from './encoder/binary.js'; export interface Field { name: string; type: Field.Type; value(key: Key, data: Data, index: number): string | number; valueKind?: (key: Key, data: Data) => Column.ValueKind; defaultFormat?: Field.Format; shouldInclude?: (data: Data) => boolean; } export declare namespace Field { const enum Type { Str = 0, Int = 1, Float = 2 } interface Format { digitCount?: number; encoder?: ArrayEncoder; typedArray?: ArrayEncoding.TypedArrayCtor; } type ParamsBase = { valueKind?: (k: K, d: D) => Column.ValueKind; encoder?: ArrayEncoder; shouldInclude?: (data: D) => boolean; }; function str(name: string, value: (k: K, d: D, index: number) => string, params?: ParamsBase): Field; function int(name: string, value: (k: K, d: D, index: number) => number, params?: ParamsBase & { typedArray?: ArrayEncoding.TypedArrayCtor; }): Field; function float(name: string, value: (k: K, d: D, index: number) => number, params?: ParamsBase & { typedArray?: ArrayEncoding.TypedArrayCtor; digitCount?: number; }): Field; function index(name: string): Field; class Builder { private fields; index(name: N): this; str(name: N, value: (k: K, d: D, index: number) => string, params?: ParamsBase): this; int(name: N, value: (k: K, d: D, index: number) => number, params?: ParamsBase & { typedArray?: ArrayEncoding.TypedArrayCtor; }): this; vec(name: N, values: ((k: K, d: D, index: number) => number)[], params?: ParamsBase & { typedArray?: ArrayEncoding.TypedArrayCtor; }): this; float(name: N, value: (k: K, d: D, index: number) => number, params?: ParamsBase & { typedArray?: ArrayEncoding.TypedArrayCtor; digitCount?: number; }): this; many(fields: ArrayLike>): this; add(field: Field): this; getFields(): Field[]; } function build(): Builder; } export interface Category { name: string; instance(ctx: Ctx): Category.Instance; } export declare namespace Category { const Empty: Instance; interface DataSource { data?: Data; rowCount: number; keys?: () => Iterator; } interface Instance { fields: Field[]; source: DataSource[]; } interface Filter { includeCategory(categoryName: string): boolean; includeField(categoryName: string, fieldName: string): boolean; } function filterOf(directives: string): Filter; const DefaultFilter: Filter; interface Formatter { getFormat(categoryName: string, fieldName: string): Field.Format | undefined; } const DefaultFormatter: Formatter; function ofTable(table: Table, indices?: ArrayLike): Category.Instance; } export interface Encoder> extends EncoderBase { readonly isBinary: boolean; setFilter(filter?: Category.Filter): void; isCategoryIncluded(name: string): boolean; setFormatter(formatter?: Category.Formatter): void; startDataBlock(header: string): void; writeCategory(category: Category, context?: Ctx, options?: Encoder.WriteCategoryOptions): void; getData(): T; binaryEncodingProvider: BinaryEncodingProvider | undefined; } export declare namespace Encoder { interface WriteCategoryOptions { ignoreFilter?: boolean; } function writeDatabase(encoder: Encoder, name: string, database: Database): void; function writeDatabaseCollection(encoder: Encoder, collection: DatabaseCollection): void; }