vortex_array/arrays/varbinview/compute/
mask.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_error::VortexResult;
5use vortex_mask::Mask;
6
7use crate::ArrayRef;
8use crate::IntoArray;
9use crate::arrays::VarBinViewArray;
10use crate::arrays::VarBinViewVTable;
11use crate::compute::MaskKernel;
12use crate::compute::MaskKernelAdapter;
13use crate::register_kernel;
14use crate::vtable::ValidityHelper;
15
16impl MaskKernel for VarBinViewVTable {
17    fn mask(&self, array: &VarBinViewArray, mask: &Mask) -> VortexResult<ArrayRef> {
18        // SAFETY: masking the validity does not affect the invariants
19        unsafe {
20            Ok(VarBinViewArray::new_unchecked(
21                array.views().clone(),
22                array.buffers().clone(),
23                array.dtype().as_nullable(),
24                array.validity().mask(mask),
25            )
26            .into_array())
27        }
28    }
29}
30
31register_kernel!(MaskKernelAdapter(VarBinViewVTable).lift());
32
33#[cfg(test)]
34mod tests {
35    use crate::arrays::VarBinViewArray;
36    use crate::compute::conformance::mask::test_mask_conformance;
37
38    #[test]
39    fn take_mask_var_bin_view_array() {
40        test_mask_conformance(
41            VarBinViewArray::from_iter_str(["one", "two", "three", "four", "five"]).as_ref(),
42        );
43
44        test_mask_conformance(
45            VarBinViewArray::from_iter_nullable_str([
46                Some("one"),
47                None,
48                Some("three"),
49                Some("four"),
50                Some("five"),
51            ])
52            .as_ref(),
53        );
54    }
55}