use vortex_error::VortexResult;
use crate::accessor::ArrayAccessor;
use crate::arrays::VarBinArray;
use crate::arrays::VarBinVTable;
use crate::compute::IsConstantKernel;
use crate::compute::IsConstantKernelAdapter;
use crate::compute::IsConstantOpts;
use crate::register_kernel;
impl IsConstantKernel for VarBinVTable {
fn is_constant(
&self,
array: &VarBinArray,
opts: &IsConstantOpts,
) -> VortexResult<Option<bool>> {
if opts.is_negligible_cost() {
return Ok(None);
}
Ok(Some(array.with_iterator(compute_is_constant)))
}
}
register_kernel!(IsConstantKernelAdapter(VarBinVTable).lift());
pub(super) fn compute_is_constant(iter: &mut dyn Iterator<Item = Option<&[u8]>>) -> bool {
let Some(first_value) = iter.next() else {
return false;
};
for v in iter {
if v != first_value {
return false;
}
}
true
}