Sources/SparkConnect/ArrowData.swift (49 lines of code) (raw):

// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. import Foundation /// @nodoc public class ArrowData { public let type: ArrowType public let buffers: [ArrowBuffer] public let children: [ArrowData] public let nullCount: UInt public let length: UInt public let stride: Int convenience init(_ arrowType: ArrowType, buffers: [ArrowBuffer], nullCount: UInt) throws { try self.init( arrowType, buffers: buffers, children: [ArrowData](), nullCount: nullCount, length: buffers[1].length) } init( _ arrowType: ArrowType, buffers: [ArrowBuffer], children: [ArrowData], nullCount: UInt, length: UInt ) throws { let infoType = arrowType.info switch infoType { case let .primitiveInfo(typeId): if typeId == ArrowTypeId.unknown { throw ArrowError.unknownType("Unknown primitive type for data") } case let .variableInfo(typeId): if typeId == ArrowTypeId.unknown { throw ArrowError.unknownType("Unknown variable type for data") } case let .timeInfo(typeId): if typeId == ArrowTypeId.unknown { throw ArrowError.unknownType("Unknown time type for data") } case let .complexInfo(typeId): if typeId == ArrowTypeId.unknown { throw ArrowError.unknownType("Unknown complex type for data") } } self.type = arrowType self.buffers = buffers self.children = children self.nullCount = nullCount self.length = length self.stride = arrowType.getStride() } public func isNull(_ at: UInt) -> Bool { let nullBuffer = buffers[0] return nullBuffer.length > 0 && !BitUtility.isSet(at, buffer: nullBuffer) } }