File size: 8,613 Bytes
be5030f
1
{"version":3,"sources":["column.ts"],"names":[],"mappings":"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","file":"column.js","sourcesContent":["// Licensed to the Apache Software Foundation (ASF) under one\n// or more contributor license agreements.  See the NOTICE file\n// distributed with this work for additional information\n// regarding copyright ownership.  The ASF licenses this file\n// to you under the Apache License, Version 2.0 (the\n// \"License\"); you may not use this file except in compliance\n// with the License.  You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing,\n// software distributed under the License is distributed on an\n// \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n// KIND, either express or implied.  See the License for the\n// specific language governing permissions and limitations\n// under the License.\n\nimport { Data } from './data';\nimport { Field } from './schema';\nimport { DataType } from './type';\nimport { Vector } from './vector';\nimport { Clonable, Sliceable, Applicative } from './vector';\nimport { VectorCtorArgs, VectorType as V } from './interfaces';\nimport { Chunked, SearchContinuation } from './vector/chunked';\n\nexport interface Column<T extends DataType = any> {\n    typeId: T['TType'];\n    concat(...others: Vector<T>[]): Column<T>;\n    slice(begin?: number, end?: number): Column<T>;\n    clone(chunks?: Vector<T>[], offsets?: Uint32Array): Column<T>;\n}\n\nexport class Column<T extends DataType = any>\n    extends Chunked<T>\n    implements Clonable<Column<T>>,\n               Sliceable<Column<T>>,\n               Applicative<T, Column<T>> {\n\n    public static new<T extends DataType>(field: string | Field<T>, ...chunks: (Vector<T> | Vector<T>[])[]): Column<T>;\n    public static new<T extends DataType>(field: string | Field<T>, data: Data<T>, ...args: VectorCtorArgs<V<T>>): Column<T>;\n    /** @nocollapse */\n    public static new<T extends DataType = any>(field: string | Field<T>, data: Data<T> | Vector<T> | (Data<T> | Vector<T>)[], ...rest: any[]) {\n\n        const chunks = Chunked.flatten<T>(\n            Array.isArray(data) ? [...data, ...rest] :\n            data instanceof Vector ? [data, ...rest] :\n            [Vector.new(data, ...rest)]\n        );\n\n        if (typeof field === 'string') {\n            const type = chunks[0].data.type;\n            field = new Field(field, type, true);\n        } else if (!field.nullable && chunks.some(({ nullCount }) => nullCount > 0)) {\n            field = field.clone({ nullable: true });\n        }\n        return new Column(field, chunks);\n    }\n\n    constructor(field: Field<T>, vectors: Vector<T>[] = [], offsets?: Uint32Array) {\n        vectors = Chunked.flatten<T>(...vectors);\n        super(field.type, vectors, offsets);\n        this._field = field;\n        if (vectors.length === 1 && !(this instanceof SingleChunkColumn)) {\n            return new SingleChunkColumn(field, vectors[0], this._chunkOffsets);\n        }\n    }\n\n    protected _field: Field<T>;\n    protected _children?: Column[];\n\n    public get field() { return this._field; }\n    public get name() { return this._field.name; }\n    public get nullable() { return this._field.nullable; }\n    public get metadata() { return this._field.metadata; }\n\n    public clone(chunks = this._chunks) {\n        return new Column(this._field, chunks);\n    }\n\n    public getChildAt<R extends DataType = any>(index: number): Column<R> | null {\n\n        if (index < 0 || index >= this.numChildren) { return null; }\n\n        let columns = this._children || (this._children = []);\n        let column: Column<R>, field: Field<R>, chunks: Vector<R>[];\n\n        if (column = columns[index]) { return column; }\n        if (field = ((this.type.children || [])[index] as Field<R>)) {\n            chunks = this._chunks\n                .map((vector) => vector.getChildAt<R>(index))\n                .filter((vec): vec is Vector<R> => vec != null);\n            if (chunks.length > 0) {\n                return (columns[index] = new Column<R>(field, chunks));\n            }\n        }\n\n        return null;\n    }\n}\n\n/** @ignore */\nclass SingleChunkColumn<T extends DataType = any> extends Column<T> {\n    protected _chunk: Vector<T>;\n    constructor(field: Field<T>, vector: Vector<T>, offsets?: Uint32Array) {\n        super(field, [vector], offsets);\n        this._chunk = vector;\n    }\n    public search(index: number): [number, number] | null;\n    public search<N extends SearchContinuation<Chunked<T>>>(index: number, then?: N): ReturnType<N>;\n    public search<N extends SearchContinuation<Chunked<T>>>(index: number, then?: N) {\n        return then ? then(this, 0, index) : [0, index];\n    }\n    public isValid(index: number): boolean {\n        return this._chunk.isValid(index);\n    }\n    public get(index: number): T['TValue'] | null {\n        return this._chunk.get(index);\n    }\n    public set(index: number, value: T['TValue'] | null): void {\n        this._chunk.set(index, value);\n    }\n    public indexOf(element: T['TValue'], offset?: number): number {\n        return this._chunk.indexOf(element, offset);\n    }\n}\n"]}