Skip to content
This repository has been archived by the owner on Feb 18, 2024. It is now read-only.

Commit

Permalink
Removed zip_validity
Browse files Browse the repository at this point in the history
  • Loading branch information
jorgecarleitao committed Oct 12, 2022
1 parent 795482d commit 4493174
Show file tree
Hide file tree
Showing 20 changed files with 69 additions and 51 deletions.
4 changes: 2 additions & 2 deletions src/array/binary/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::{
bitmap::{
utils::{zip_validity, BitmapIter, ZipValidity},
utils::{BitmapIter, ZipValidity},
Bitmap,
},
buffer::Buffer,
Expand Down Expand Up @@ -117,7 +117,7 @@ impl<O: Offset> BinaryArray<O> {

/// Returns an iterator of `Option<&[u8]>` over every element of this array.
pub fn iter(&self) -> ZipValidity<&[u8], BinaryValueIter<O>, BitmapIter> {
zip_validity(self.values_iter(), self.validity.as_ref().map(|x| x.iter()))
ZipValidity::new(self.values_iter(), self.validity.as_ref().map(|x| x.iter()))
}

/// Returns an iterator of `&[u8]` over every element of this array, ignoring the validity
Expand Down
4 changes: 2 additions & 2 deletions src/array/boolean/iterator.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::bitmap::utils::{zip_validity, BitmapIter, ZipValidity};
use crate::bitmap::utils::{BitmapIter, ZipValidity};
use crate::bitmap::IntoIter;

use super::super::MutableArray;
Expand Down Expand Up @@ -41,7 +41,7 @@ impl<'a> MutableBooleanArray {
/// Returns an iterator over the optional values of this [`MutableBooleanArray`].
#[inline]
pub fn iter(&'a self) -> ZipValidity<bool, BitmapIter<'a>, BitmapIter<'a>> {
zip_validity(
ZipValidity::new(
self.values().iter(),
self.validity().as_ref().map(|x| x.iter()),
)
Expand Down
4 changes: 2 additions & 2 deletions src/array/boolean/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::{
bitmap::{
utils::{zip_validity, BitmapIter, ZipValidity},
utils::{BitmapIter, ZipValidity},
Bitmap, MutableBitmap,
},
datatypes::{DataType, PhysicalType},
Expand Down Expand Up @@ -88,7 +88,7 @@ impl BooleanArray {
/// Returns an iterator over the optional values of this [`BooleanArray`].
#[inline]
pub fn iter(&self) -> ZipValidity<bool, BitmapIter, BitmapIter> {
zip_validity(
ZipValidity::new(
self.values().iter(),
self.validity.as_ref().map(|x| x.iter()),
)
Expand Down
4 changes: 2 additions & 2 deletions src/array/dictionary/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::hint::unreachable_unchecked;

use crate::{
bitmap::{
utils::{zip_validity, BitmapIter, ZipValidity},
utils::{BitmapIter, ZipValidity},
Bitmap,
},
datatypes::{DataType, IntegerType},
Expand Down Expand Up @@ -191,7 +191,7 @@ impl<K: DictionaryKey> DictionaryArray<K> {
/// This function will allocate a new [`Scalar`] per item and is usually not performant.
/// Consider calling `keys_iter` and `values`, downcasting `values`, and iterating over that.
pub fn iter(&self) -> ZipValidity<Box<dyn Scalar>, DictionaryValuesIter<K>, BitmapIter> {
zip_validity(
ZipValidity::new(
DictionaryValuesIter::new(self),
self.keys.validity().as_ref().map(|x| x.iter()),
)
Expand Down
6 changes: 3 additions & 3 deletions src/array/fixed_size_binary/iterator.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::array::{ArrayAccessor, ArrayValuesIter, MutableArray};
use crate::bitmap::utils::{zip_validity, BitmapIter, ZipValidity};
use crate::bitmap::utils::{BitmapIter, ZipValidity};

use super::{FixedSizeBinaryArray, MutableFixedSizeBinaryArray};

Expand Down Expand Up @@ -47,7 +47,7 @@ impl<'a> IntoIterator for &'a FixedSizeBinaryArray {
impl<'a> FixedSizeBinaryArray {
/// constructs a new iterator
pub fn iter(&'a self) -> ZipValidity<&'a [u8], FixedSizeBinaryValuesIter<'a>, BitmapIter<'a>> {
zip_validity(self.values_iter(), self.validity.as_ref().map(|x| x.iter()))
ZipValidity::new(self.values_iter(), self.validity.as_ref().map(|x| x.iter()))
}

/// Returns iterator over the values of [`FixedSizeBinaryArray`]
Expand All @@ -70,7 +70,7 @@ impl<'a> MutableFixedSizeBinaryArray {
pub fn iter(
&'a self,
) -> ZipValidity<&'a [u8], MutableFixedSizeBinaryValuesIter<'a>, BitmapIter<'a>> {
zip_validity(
ZipValidity::new(
self.iter_values(),
self.validity().as_ref().map(|x| x.iter()),
)
Expand Down
4 changes: 2 additions & 2 deletions src/array/fixed_size_list/iterator.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::{
array::{Array, ArrayAccessor, ArrayValuesIter},
bitmap::utils::{zip_validity, BitmapIter, ZipValidity},
bitmap::utils::{BitmapIter, ZipValidity},
};

use super::FixedSizeListArray;
Expand Down Expand Up @@ -36,7 +36,7 @@ impl<'a> IntoIterator for &'a FixedSizeListArray {
impl<'a> FixedSizeListArray {
/// Returns an iterator of `Option<Box<dyn Array>>`
pub fn iter(&'a self) -> ZipIter<'a> {
zip_validity(
ZipValidity::new(
FixedSizeListValuesIter::new(self),
self.validity.as_ref().map(|x| x.iter()),
)
Expand Down
3 changes: 1 addition & 2 deletions src/array/iterator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@ mod private {
impl<'a, T: super::ArrayAccessor<'a>> Sealed for T {}
}

///
/// Sealed trait representing assess to a value of an array.
/// # Safety
/// Implementers of this trait guarantee that
/// `value_unchecked` is safe when called up to `len`
/// Implementations must guarantee that
pub unsafe trait ArrayAccessor<'a>: private::Sealed {
type Item: 'a;
unsafe fn value_unchecked(&'a self, index: usize) -> Self::Item;
Expand Down
4 changes: 2 additions & 2 deletions src/array/list/iterator.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::array::Offset;
use crate::array::{Array, ArrayAccessor, ArrayValuesIter};
use crate::bitmap::utils::{zip_validity, BitmapIter, ZipValidity};
use crate::bitmap::utils::{BitmapIter, ZipValidity};

use super::ListArray;

Expand Down Expand Up @@ -35,7 +35,7 @@ impl<'a, O: Offset> IntoIterator for &'a ListArray<O> {
impl<'a, O: Offset> ListArray<O> {
/// Returns an iterator of `Option<Box<dyn Array>>`
pub fn iter(&'a self) -> ZipIter<'a, O> {
zip_validity(
ZipValidity::new(
ListValuesIter::new(self),
self.validity.as_ref().map(|x| x.iter()),
)
Expand Down
4 changes: 2 additions & 2 deletions src/array/map/iterator.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::array::Array;
use crate::bitmap::utils::{zip_validity, BitmapIter, ZipValidity};
use crate::bitmap::utils::{BitmapIter, ZipValidity};
use crate::trusted_len::TrustedLen;

use super::MapArray;
Expand Down Expand Up @@ -72,7 +72,7 @@ impl<'a> IntoIterator for &'a MapArray {
impl<'a> MapArray {
/// Returns an iterator of `Option<Box<dyn Array>>`
pub fn iter(&'a self) -> ZipValidity<Box<dyn Array>, MapValuesIter<'a>, BitmapIter<'a>> {
zip_validity(
ZipValidity::new(
MapValuesIter::new(self),
self.validity.as_ref().map(|x| x.iter()),
)
Expand Down
4 changes: 2 additions & 2 deletions src/array/primitive/iterator.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::{
array::MutableArray,
bitmap::utils::{zip_validity, BitmapIter, ZipValidity},
bitmap::utils::{BitmapIter, ZipValidity},
bitmap::IntoIter as BitmapIntoIter,
buffer::IntoIter,
types::NativeType,
Expand Down Expand Up @@ -35,7 +35,7 @@ impl<'a, T: NativeType> MutablePrimitiveArray<T> {
/// Returns an iterator over `Option<T>`
#[inline]
pub fn iter(&'a self) -> ZipValidity<&'a T, std::slice::Iter<'a, T>, BitmapIter<'a>> {
zip_validity(
ZipValidity::new(
self.values().iter(),
self.validity().as_ref().map(|x| x.iter()),
)
Expand Down
4 changes: 2 additions & 2 deletions src/array/primitive/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::{
bitmap::{
utils::{zip_validity, BitmapIter, ZipValidity},
utils::{BitmapIter, ZipValidity},
Bitmap,
},
buffer::Buffer,
Expand Down Expand Up @@ -141,7 +141,7 @@ impl<T: NativeType> PrimitiveArray<T> {
/// Returns an iterator over the values and validity, `Option<&T>`.
#[inline]
pub fn iter(&self) -> ZipValidity<&T, std::slice::Iter<T>, BitmapIter> {
zip_validity(
ZipValidity::new(
self.values().iter(),
self.validity().as_ref().map(|x| x.iter()),
)
Expand Down
4 changes: 2 additions & 2 deletions src/array/struct_/iterator.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::{
bitmap::utils::{zip_validity, BitmapIter, ZipValidity},
bitmap::utils::{BitmapIter, ZipValidity},
scalar::{new_scalar, Scalar},
trusted_len::TrustedLen,
};
Expand Down Expand Up @@ -89,7 +89,7 @@ impl<'a> IntoIterator for &'a StructArray {
impl<'a> StructArray {
/// Returns an iterator of `Option<Box<dyn Array>>`
pub fn iter(&'a self) -> ZipIter<'a> {
zip_validity(
ZipValidity::new(
StructValueIter::new(self),
self.validity.as_ref().map(|x| x.iter()),
)
Expand Down
4 changes: 2 additions & 2 deletions src/array/utf8/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::{
bitmap::{
utils::{zip_validity, BitmapIter, ZipValidity},
utils::{BitmapIter, ZipValidity},
Bitmap,
},
buffer::Buffer,
Expand Down Expand Up @@ -133,7 +133,7 @@ impl<O: Offset> Utf8Array<O> {

/// Returns an iterator of `Option<&str>`
pub fn iter(&self) -> ZipValidity<&str, Utf8ValuesIter<O>, BitmapIter> {
zip_validity(self.values_iter(), self.validity.as_ref().map(|x| x.iter()))
ZipValidity::new(self.values_iter(), self.validity.as_ref().map(|x| x.iter()))
}

/// Returns an iterator of `&str`
Expand Down
4 changes: 2 additions & 2 deletions src/array/utf8/mutable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use crate::array::physical_binary::*;
use crate::{
array::{Array, MutableArray, Offset, TryExtend, TryPush},
bitmap::{
utils::{zip_validity, BitmapIter, ZipValidity},
utils::{BitmapIter, ZipValidity},
Bitmap, MutableBitmap,
},
datatypes::DataType,
Expand Down Expand Up @@ -206,7 +206,7 @@ impl<O: Offset> MutableUtf8Array<O> {

/// Returns an iterator of `Option<&str>`
pub fn iter(&self) -> ZipValidity<&str, MutableUtf8ValuesIter<O>, BitmapIter> {
zip_validity(self.values_iter(), self.validity.as_ref().map(|x| x.iter()))
ZipValidity::new(self.values_iter(), self.validity.as_ref().map(|x| x.iter()))
}

/// Converts itself into an [`Array`].
Expand Down
8 changes: 0 additions & 8 deletions src/bitmap/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,3 @@ pub fn count_zeros(slice: &[u8], offset: usize, len: usize) -> usize {

len - set_count
}

/// Returns an iterator adapter that returns Option<T> according to an optional validity.
pub fn zip_validity<T, I: Iterator<Item = T>>(
values: I,
validity: Option<BitmapIter>,
) -> ZipValidity<T, I, BitmapIter> {
ZipValidity::new(values, validity)
}
6 changes: 3 additions & 3 deletions src/io/avro/write/serialize.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use avro_schema::schema::{Record, Schema as AvroSchema};
use avro_schema::write::encode;

use crate::bitmap::utils::zip_validity;
use crate::bitmap::utils::ZipValidity;
use crate::datatypes::{IntervalUnit, PhysicalType, PrimitiveType};
use crate::types::months_days_ns;
use crate::{array::*, datatypes::DataType};
Expand Down Expand Up @@ -126,7 +126,7 @@ fn list_optional<'a, O: Offset>(array: &'a ListArray<O>, schema: &AvroSchema) ->
.offsets()
.windows(2)
.map(|w| (w[1] - w[0]).to_usize() as i64);
let lengths = zip_validity(lengths, array.validity().as_ref().map(|x| x.iter()));
let lengths = ZipValidity::new(lengths, array.validity().as_ref().map(|x| x.iter()));

Box::new(BufStreamingIterator::new(
lengths,
Expand Down Expand Up @@ -180,7 +180,7 @@ fn struct_optional<'a>(array: &'a StructArray, schema: &Record) -> BoxSerializer
.map(|(x, schema)| new_serializer(x.as_ref(), schema))
.collect::<Vec<_>>();

let iterator = zip_validity(0..array.len(), array.validity().as_ref().map(|x| x.iter()));
let iterator = ZipValidity::new(0..array.len(), array.validity().as_ref().map(|x| x.iter()));

Box::new(BufStreamingIterator::new(
iterator,
Expand Down
6 changes: 3 additions & 3 deletions src/io/json/write/serialize.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use lexical_core::ToLexical;
use std::io::Write;
use streaming_iterator::StreamingIterator;

use crate::bitmap::utils::zip_validity;
use crate::bitmap::utils::ZipValidity;
use crate::datatypes::TimeUnit;
use crate::io::iterator::BufStreamingIterator;
use crate::temporal_conversions::{
Expand Down Expand Up @@ -103,7 +103,7 @@ fn struct_serializer<'a>(
let names = array.fields().iter().map(|f| f.name.as_str());

Box::new(BufStreamingIterator::new(
zip_validity(0..array.len(), array.validity().map(|x| x.iter())),
ZipValidity::new(0..array.len(), array.validity().map(|x| x.iter())),
move |maybe, buf| {
if maybe.is_some() {
let names = names.clone();
Expand Down Expand Up @@ -140,7 +140,7 @@ fn list_serializer<'a, O: Offset>(
let mut serializer = new_serializer(array.values().as_ref());

Box::new(BufStreamingIterator::new(
zip_validity(
ZipValidity::new(
array.offsets().windows(2),
array.validity().map(|x| x.iter()),
),
Expand Down
12 changes: 12 additions & 0 deletions tests/it/array/boolean/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,15 @@ fn from_iter() {
let a: BooleanArray = iter.collect();
assert_eq!(a.len(), 2);
}

#[test]
fn into_iter() {
let data = vec![Some(true), None, Some(false)];
let rev = data.clone().into_iter().rev();

let array: BooleanArray = data.clone().into_iter().collect();

assert_eq!(array.clone().into_iter().collect::<Vec<_>>(), data);

assert!(array.into_iter().rev().eq(rev))
}
12 changes: 12 additions & 0 deletions tests/it/array/primitive/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,15 @@ fn into_mut_3() {
let array = PrimitiveArray::new(DataType::Int32, values, validity);
assert!(array.into_mut().is_right());
}

#[test]
fn into_iter() {
let data = vec![Some(1), None, Some(10)];
let rev = data.clone().into_iter().rev();

let array: Int32Array = data.clone().into_iter().collect();

assert_eq!(array.clone().into_iter().collect::<Vec<_>>(), data);

assert!(array.into_iter().rev().eq(rev))
}
Loading

0 comments on commit 4493174

Please sign in to comment.