Path: blob/main/crates/polars-arrow/src/array/union/iterator.rs
6939 views
use super::UnionArray;1use crate::scalar::Scalar;2use crate::trusted_len::TrustedLen;34#[derive(Debug, Clone)]5pub struct UnionIter<'a> {6array: &'a UnionArray,7current: usize,8}910impl<'a> UnionIter<'a> {11#[inline]12pub fn new(array: &'a UnionArray) -> Self {13Self { array, current: 0 }14}15}1617impl Iterator for UnionIter<'_> {18type Item = Box<dyn Scalar>;1920#[inline]21fn next(&mut self) -> Option<Self::Item> {22if self.current == self.array.len() {23None24} else {25let old = self.current;26self.current += 1;27Some(unsafe { self.array.value_unchecked(old) })28}29}3031#[inline]32fn size_hint(&self) -> (usize, Option<usize>) {33let len = self.array.len() - self.current;34(len, Some(len))35}36}3738impl<'a> IntoIterator for &'a UnionArray {39type Item = Box<dyn Scalar>;40type IntoIter = UnionIter<'a>;4142#[inline]43fn into_iter(self) -> Self::IntoIter {44self.iter()45}46}4748impl<'a> UnionArray {49/// constructs a new iterator50#[inline]51pub fn iter(&'a self) -> UnionIter<'a> {52UnionIter::new(self)53}54}5556impl std::iter::ExactSizeIterator for UnionIter<'_> {}5758unsafe impl TrustedLen for UnionIter<'_> {}596061