Path: blob/main/crates/polars-arrow/src/array/primitive/iterator.rs
6939 views
use super::{MutablePrimitiveArray, PrimitiveArray};1use crate::array::{ArrayAccessor, MutableArray};2use crate::bitmap::IntoIter as BitmapIntoIter;3use crate::bitmap::utils::{BitmapIter, ZipValidity};4use crate::buffer::IntoIter;5use crate::types::NativeType;67unsafe impl<'a, T: NativeType> ArrayAccessor<'a> for [T] {8type Item = T;910#[inline]11unsafe fn value_unchecked(&'a self, index: usize) -> Self::Item {12*self.get_unchecked(index)13}1415#[inline]16fn len(&self) -> usize {17(*self).len()18}19}2021impl<T: NativeType> IntoIterator for PrimitiveArray<T> {22type Item = Option<T>;23type IntoIter = ZipValidity<T, IntoIter<T>, BitmapIntoIter>;2425#[inline]26fn into_iter(self) -> Self::IntoIter {27let (_, values, validity) = self.into_inner();28let values = values.into_iter();29let validity =30validity.and_then(|validity| (validity.unset_bits() > 0).then(|| validity.into_iter()));31ZipValidity::new(values, validity)32}33}3435impl<'a, T: NativeType> IntoIterator for &'a PrimitiveArray<T> {36type Item = Option<&'a T>;37type IntoIter = ZipValidity<&'a T, std::slice::Iter<'a, T>, BitmapIter<'a>>;3839#[inline]40fn into_iter(self) -> Self::IntoIter {41self.iter()42}43}4445impl<'a, T: NativeType> MutablePrimitiveArray<T> {46/// Returns an iterator over `Option<T>`47#[inline]48pub fn iter(&'a self) -> ZipValidity<&'a T, std::slice::Iter<'a, T>, BitmapIter<'a>> {49ZipValidity::new(50self.values().iter(),51self.validity().as_ref().map(|x| x.iter()),52)53}5455/// Returns an iterator of `T`56#[inline]57pub fn values_iter(&'a self) -> std::slice::Iter<'a, T> {58self.values().iter()59}60}616263