Thanks to visit codestin.com
Credit goes to docs.rs

arrow2/array/primitive/
iterator.rs

1use crate::{
2    array::MutableArray,
3    bitmap::utils::{BitmapIter, ZipValidity},
4    bitmap::IntoIter as BitmapIntoIter,
5    buffer::IntoIter,
6    types::NativeType,
7};
8
9use super::{MutablePrimitiveArray, PrimitiveArray};
10
11impl<T: NativeType> IntoIterator for PrimitiveArray<T> {
12    type Item = Option<T>;
13    type IntoIter = ZipValidity<T, IntoIter<T>, BitmapIntoIter>;
14
15    #[inline]
16    fn into_iter(self) -> Self::IntoIter {
17        let (_, values, validity) = self.into_inner();
18        let values = values.into_iter();
19        let validity =
20            validity.and_then(|validity| (validity.unset_bits() > 0).then(|| validity.into_iter()));
21        ZipValidity::new(values, validity)
22    }
23}
24
25impl<'a, T: NativeType> IntoIterator for &'a PrimitiveArray<T> {
26    type Item = Option<&'a T>;
27    type IntoIter = ZipValidity<&'a T, std::slice::Iter<'a, T>, BitmapIter<'a>>;
28
29    #[inline]
30    fn into_iter(self) -> Self::IntoIter {
31        self.iter()
32    }
33}
34
35impl<'a, T: NativeType> MutablePrimitiveArray<T> {
36    /// Returns an iterator over `Option<T>`
37    #[inline]
38    pub fn iter(&'a self) -> ZipValidity<&'a T, std::slice::Iter<'a, T>, BitmapIter<'a>> {
39        ZipValidity::new(
40            self.values().iter(),
41            self.validity().as_ref().map(|x| x.iter()),
42        )
43    }
44
45    /// Returns an iterator of `T`
46    #[inline]
47    pub fn values_iter(&'a self) -> std::slice::Iter<'a, T> {
48        self.values().iter()
49    }
50}