File size: 16,069 Bytes
be5030f
1
{"version":3,"sources":["visitor/iterator.ts"],"names":[],"mappings":"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","file":"iterator.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 { Type } from '../enum';\nimport { Visitor } from '../visitor';\nimport { VectorType } from '../interfaces';\nimport { iterateBits } from '../util/bit';\nimport { instance as getVisitor } from './get';\nimport {\n    DataType, Dictionary,\n    Bool, Null, Utf8, Binary, Decimal, FixedSizeBinary, List, FixedSizeList, Map_, Struct,\n    Float, Float16, Float32, Float64,\n    Int, Uint8, Uint16, Uint32, Uint64, Int8, Int16, Int32, Int64,\n    Date_, DateDay, DateMillisecond,\n    Interval, IntervalDayTime, IntervalYearMonth,\n    Time, TimeSecond, TimeMillisecond, TimeMicrosecond, TimeNanosecond,\n    Timestamp, TimestampSecond, TimestampMillisecond, TimestampMicrosecond, TimestampNanosecond,\n    Union, DenseUnion, SparseUnion,\n} from '../type';\n\n/** @ignore */\nexport interface IteratorVisitor extends Visitor {\n    visit<T extends VectorType>(node: T): IterableIterator<T['TValue'] | null>;\n    visitMany <T extends VectorType>(nodes: T[]): IterableIterator<T['TValue'] | null>[];\n    getVisitFn<T extends Type>(node: T): (vector: VectorType<T>) => IterableIterator<VectorType<T>['TValue'] | null>;\n    getVisitFn<T extends DataType>(node: VectorType<T> | Data<T> | T): (vector: VectorType<T>) => IterableIterator<VectorType<T>['TValue'] | null>;\n    visitNull                 <T extends Null>                 (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitBool                 <T extends Bool>                 (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitInt                  <T extends Int>                  (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitInt8                 <T extends Int8>                 (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitInt16                <T extends Int16>                (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitInt32                <T extends Int32>                (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitInt64                <T extends Int64>                (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitUint8                <T extends Uint8>                (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitUint16               <T extends Uint16>               (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitUint32               <T extends Uint32>               (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitUint64               <T extends Uint64>               (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitFloat                <T extends Float>                (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitFloat16              <T extends Float16>              (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitFloat32              <T extends Float32>              (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitFloat64              <T extends Float64>              (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitUtf8                 <T extends Utf8>                 (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitBinary               <T extends Binary>               (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitFixedSizeBinary      <T extends FixedSizeBinary>      (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitDate                 <T extends Date_>                (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitDateDay              <T extends DateDay>              (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitDateMillisecond      <T extends DateMillisecond>      (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitTimestamp            <T extends Timestamp>            (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitTimestampSecond      <T extends TimestampSecond>      (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitTimestampMillisecond <T extends TimestampMillisecond> (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitTimestampMicrosecond <T extends TimestampMicrosecond> (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitTimestampNanosecond  <T extends TimestampNanosecond>  (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitTime                 <T extends Time>                 (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitTimeSecond           <T extends TimeSecond>           (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitTimeMillisecond      <T extends TimeMillisecond>      (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitTimeMicrosecond      <T extends TimeMicrosecond>      (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitTimeNanosecond       <T extends TimeNanosecond>       (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitDecimal              <T extends Decimal>              (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitList                 <T extends List>                 (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitStruct               <T extends Struct>               (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitUnion                <T extends Union>                (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitDenseUnion           <T extends DenseUnion>           (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitSparseUnion          <T extends SparseUnion>          (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitDictionary           <T extends Dictionary>           (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitInterval             <T extends Interval>             (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitIntervalDayTime      <T extends IntervalDayTime>      (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitIntervalYearMonth    <T extends IntervalYearMonth>    (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitFixedSizeList        <T extends FixedSizeList>        (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n    visitMap                  <T extends Map_>                 (vector: VectorType<T>): IterableIterator<T['TValue'] | null>;\n}\n\n/** @ignore */\nexport class IteratorVisitor extends Visitor {}\n\n/** @ignore */\nfunction nullableIterator<T extends DataType>(vector: VectorType<T>): IterableIterator<T['TValue'] | null> {\n    const getFn = getVisitor.getVisitFn(vector);\n    return iterateBits<T['TValue'] | null>(\n        vector.nullBitmap, vector.offset, vector.length, vector,\n        (vec: VectorType<T>, idx: number, nullByte: number, nullBit: number) =>\n            ((nullByte & 1 << nullBit) !== 0) ? getFn(vec, idx) : null\n    );\n}\n\n/** @ignore */\nfunction vectorIterator<T extends DataType>(vector: VectorType<T>): IterableIterator<T['TValue'] | null> {\n\n    // If nullable, iterate manually\n    if (vector.nullCount > 0) {\n        return nullableIterator<T>(vector);\n    }\n\n    const { type, typeId, length } = vector;\n\n    // Fast case, defer to native iterators if possible\n    if (vector.stride === 1 && (\n        (typeId === Type.Timestamp) ||\n        (typeId === Type.Int && (type as Int).bitWidth !== 64) ||\n        (typeId === Type.Time && (type as Time).bitWidth !== 64) ||\n        (typeId === Type.Float && (type as Float).precision > 0 /* Precision.HALF */)\n    )) {\n        return vector.values.subarray(0, length)[Symbol.iterator]();\n    }\n\n    // Otherwise, iterate manually\n    return (function* (getFn) {\n        for (let index = -1; ++index < length;) {\n            yield getFn(vector, index);\n        }\n    })(getVisitor.getVisitFn(vector));\n}\n\nIteratorVisitor.prototype.visitNull                 = vectorIterator;\nIteratorVisitor.prototype.visitBool                 = vectorIterator;\nIteratorVisitor.prototype.visitInt                  = vectorIterator;\nIteratorVisitor.prototype.visitInt8                 = vectorIterator;\nIteratorVisitor.prototype.visitInt16                = vectorIterator;\nIteratorVisitor.prototype.visitInt32                = vectorIterator;\nIteratorVisitor.prototype.visitInt64                = vectorIterator;\nIteratorVisitor.prototype.visitUint8                = vectorIterator;\nIteratorVisitor.prototype.visitUint16               = vectorIterator;\nIteratorVisitor.prototype.visitUint32               = vectorIterator;\nIteratorVisitor.prototype.visitUint64               = vectorIterator;\nIteratorVisitor.prototype.visitFloat                = vectorIterator;\nIteratorVisitor.prototype.visitFloat16              = vectorIterator;\nIteratorVisitor.prototype.visitFloat32              = vectorIterator;\nIteratorVisitor.prototype.visitFloat64              = vectorIterator;\nIteratorVisitor.prototype.visitUtf8                 = vectorIterator;\nIteratorVisitor.prototype.visitBinary               = vectorIterator;\nIteratorVisitor.prototype.visitFixedSizeBinary      = vectorIterator;\nIteratorVisitor.prototype.visitDate                 = vectorIterator;\nIteratorVisitor.prototype.visitDateDay              = vectorIterator;\nIteratorVisitor.prototype.visitDateMillisecond      = vectorIterator;\nIteratorVisitor.prototype.visitTimestamp            = vectorIterator;\nIteratorVisitor.prototype.visitTimestampSecond      = vectorIterator;\nIteratorVisitor.prototype.visitTimestampMillisecond = vectorIterator;\nIteratorVisitor.prototype.visitTimestampMicrosecond = vectorIterator;\nIteratorVisitor.prototype.visitTimestampNanosecond  = vectorIterator;\nIteratorVisitor.prototype.visitTime                 = vectorIterator;\nIteratorVisitor.prototype.visitTimeSecond           = vectorIterator;\nIteratorVisitor.prototype.visitTimeMillisecond      = vectorIterator;\nIteratorVisitor.prototype.visitTimeMicrosecond      = vectorIterator;\nIteratorVisitor.prototype.visitTimeNanosecond       = vectorIterator;\nIteratorVisitor.prototype.visitDecimal              = vectorIterator;\nIteratorVisitor.prototype.visitList                 = vectorIterator;\nIteratorVisitor.prototype.visitStruct               = vectorIterator;\nIteratorVisitor.prototype.visitUnion                = vectorIterator;\nIteratorVisitor.prototype.visitDenseUnion           = vectorIterator;\nIteratorVisitor.prototype.visitSparseUnion          = vectorIterator;\nIteratorVisitor.prototype.visitDictionary           = vectorIterator;\nIteratorVisitor.prototype.visitInterval             = vectorIterator;\nIteratorVisitor.prototype.visitIntervalDayTime      = vectorIterator;\nIteratorVisitor.prototype.visitIntervalYearMonth    = vectorIterator;\nIteratorVisitor.prototype.visitFixedSizeList        = vectorIterator;\nIteratorVisitor.prototype.visitMap                  = vectorIterator;\n\n/** @ignore */\nexport const instance = new IteratorVisitor();\n"]}