# 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. module Arrow class Array include Enumerable include GenericFilterable include GenericTakeable class << self def new(*args) _builder_class = builder_class return super if _builder_class.nil? return super unless _builder_class.buildable?(args) _builder_class.build(*args) end def builder_class builder_class_name = "#{name}Builder" return nil unless const_defined?(builder_class_name) const_get(builder_class_name) end end # @param i [Integer] # The index of the value to be gotten. # # You can specify negative index like for `::Array#[]`. # # @return [Object, nil] # The `i`-th value. # # `nil` for NULL value or out of range `i`. def [](i) i += length if i < 0 return nil if i < 0 or i >= length if null?(i) nil else get_value(i) end end def each return to_enum(__method__) unless block_given? length.times do |i| yield(self[i]) end end def reverse_each return to_enum(__method__) unless block_given? (length - 1).downto(0) do |i| yield(self[i]) end end def to_arrow self end alias_method :value_data_type_raw, :value_data_type def value_data_type @value_data_type ||= value_data_type_raw end def to_a values end alias_method :is_in_raw, :is_in def is_in(values) case values when ::Array if self.class.builder_class.buildable?([values]) values = self.class.new(values) else values = self.class.new(value_data_type, values) end is_in_raw(values) when ChunkedArray is_in_chunked_array(values) else is_in_raw(values) end end end end