vortex_array/compute/
mask.rs1use std::ops::Not;
5
6use vortex_error::VortexResult;
7use vortex_mask::Mask;
8
9use crate::Array;
10use crate::ArrayRef;
11use crate::IntoArray;
12use crate::arrays::ConstantArray;
13use crate::builtins::ArrayBuiltins;
14use crate::scalar::Scalar;
15
16pub fn mask(array: &dyn Array, mask: &Mask) -> VortexResult<ArrayRef> {
24 let mask = mask.not();
25 match mask {
26 Mask::AllTrue(_) => array.to_array().cast(array.dtype().as_nullable()),
27 Mask::AllFalse(_) => Ok(ConstantArray::new(
28 Scalar::null(array.dtype().as_nullable()),
29 array.len(),
30 )
31 .into_array()),
32 Mask::Values(val) => array.to_array().mask(val.into_array()),
33 }
34}