use std::ops::Not;
use vortex_error::VortexResult;
use vortex_mask::Mask;
use crate::Array;
use crate::ArrayRef;
use crate::IntoArray;
use crate::arrays::ConstantArray;
use crate::builtins::ArrayBuiltins;
use crate::scalar::Scalar;
pub fn mask(array: &dyn Array, mask: &Mask) -> VortexResult<ArrayRef> {
let mask = mask.not();
match mask {
Mask::AllTrue(_) => array.to_array().cast(array.dtype().as_nullable()),
Mask::AllFalse(_) => Ok(ConstantArray::new(
Scalar::null(array.dtype().as_nullable()),
array.len(),
)
.into_array()),
Mask::Values(val) => array.to_array().mask(val.into_array()),
}
}