|
@@ -21,7 +21,7 @@ import { ArrayEncoder, ArrayEncoding } from '../../common/binary-cif';
|
|
|
export interface Field<Key = any, Data = any> {
|
|
|
name: string,
|
|
|
type: Field.Type,
|
|
|
- value(key: Key, data: Data): string | number
|
|
|
+ value(key: Key, data: Data, index: number): string | number
|
|
|
valueKind?: (key: Key, data: Data) => Column.ValueKind,
|
|
|
defaultFormat?: Field.Format,
|
|
|
shouldInclude?: (data: Data) => boolean
|
|
@@ -38,11 +38,11 @@ export namespace Field {
|
|
|
|
|
|
export type ParamsBase<K, D> = { valueKind?: (k: K, d: D) => Column.ValueKind, encoder?: ArrayEncoder, shouldInclude?: (data: D) => boolean }
|
|
|
|
|
|
- export function str<K, D = any>(name: string, value: (k: K, d: D) => string, params?: ParamsBase<K, D>): Field<K, D> {
|
|
|
+ export function str<K, D = any>(name: string, value: (k: K, d: D, index: number) => string, params?: ParamsBase<K, D>): Field<K, D> {
|
|
|
return { name, type: Type.Str, value, valueKind: params && params.valueKind, defaultFormat: params && params.encoder ? { encoder: params.encoder } : void 0, shouldInclude: params && params.shouldInclude };
|
|
|
}
|
|
|
|
|
|
- export function int<K, D = any>(name: string, value: (k: K, d: D) => number, params?: ParamsBase<K, D> & { typedArray?: ArrayEncoding.TypedArrayCtor }): Field<K, D> {
|
|
|
+ export function int<K, D = any>(name: string, value: (k: K, d: D, index: number) => number, params?: ParamsBase<K, D> & { typedArray?: ArrayEncoding.TypedArrayCtor }): Field<K, D> {
|
|
|
return {
|
|
|
name,
|
|
|
type: Type.Int,
|
|
@@ -53,7 +53,7 @@ export namespace Field {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
- export function float<K, D = any>(name: string, value: (k: K, d: D) => number, params?: ParamsBase<K, D> & { typedArray?: ArrayEncoding.TypedArrayCtor, digitCount?: number }): Field<K, D> {
|
|
|
+ export function float<K, D = any>(name: string, value: (k: K, d: D, index: number) => number, params?: ParamsBase<K, D> & { typedArray?: ArrayEncoding.TypedArrayCtor, digitCount?: number }): Field<K, D> {
|
|
|
return {
|
|
|
name,
|
|
|
type: Type.Float,
|
|
@@ -63,6 +63,10 @@ export namespace Field {
|
|
|
shouldInclude: params && params.shouldInclude
|
|
|
};
|
|
|
}
|
|
|
+
|
|
|
+ export function index(name: string) {
|
|
|
+ return int(name, (e, d, i) => i + 1, { typedArray: Int32Array, encoder: ArrayEncoding.by(ArrayEncoding.delta).and(ArrayEncoding.runLength).and(ArrayEncoding.integerPacking) })
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
export interface Category<Key = any, Data = any> {
|