vortex_array/arrays/varbinview/compute/
mask.rs1use 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 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}