vortex_array/arrays/listview/compute/
mask.rs1use vortex_error::VortexResult;
5
6use crate::ArrayRef;
7use crate::IntoArray;
8use crate::array::ArrayParts;
9use crate::array::ArrayView;
10use crate::arrays::ListView;
11use crate::arrays::ListViewArray;
12use crate::arrays::listview::ListViewArraySlotsExt;
13use crate::arrays::listview::ListViewData;
14use crate::scalar_fn::fns::mask::MaskReduce;
15use crate::validity::Validity;
16
17impl MaskReduce for ListView {
18 const VALIDITY_IS_METADATA_ONLY: bool = true;
19
20 fn mask(array: ArrayView<'_, ListView>, mask: &ArrayRef) -> VortexResult<Option<ArrayRef>> {
21 let validity = array.validity()?.and(Validity::Array(mask.clone()))?;
22 let slots = ListViewData::make_slots(
23 array.elements(),
24 array.offsets(),
25 array.sizes(),
26 &validity,
27 array.len(),
28 );
29 let parts = ArrayParts::new(
30 ListView,
31 array.dtype().as_nullable(),
32 array.len(),
33 array.data().clone(),
34 slots,
35 );
36
37 Ok(Some(
40 unsafe { ListViewArray::from_parts_unchecked(parts) }.into_array(),
41 ))
42 }
43}