in src/arraytypes/list.jl [47:75]
@propagate_inbounds function Base.getindex(l::List{T}, i::Integer) where {T}
@boundscheck checkbounds(l, i)
@inbounds lo, hi = l.offsets[i]
S = Base.nonmissingtype(T)
K = ArrowTypes.ArrowKind(ArrowTypes.ArrowType(S))
if ArrowTypes.isstringtype(K) || S <: Base.CodeUnits
if S !== T
if S <: Base.CodeUnits
return l.validity[i] ?
Base.CodeUnits(unsafe_string(pointer(l.data, lo), hi - lo + 1)) :
missing
else
return l.validity[i] ?
ArrowTypes.fromarrow(T, pointer(l.data, lo), hi - lo + 1) : missing
end
else
if S <: Base.CodeUnits
return Base.CodeUnits(unsafe_string(pointer(l.data, lo), hi - lo + 1))
else
return ArrowTypes.fromarrow(T, pointer(l.data, lo), hi - lo + 1)
end
end
elseif S !== T
return l.validity[i] ? ArrowTypes.fromarrow(T, view(l.data, lo:hi)) : missing
else
return ArrowTypes.fromarrow(T, view(l.data, lo:hi))
end
end