vortex_array/arrays/varbin/compute/
is_constant.rs

1use vortex_error::VortexResult;
2
3use crate::accessor::ArrayAccessor;
4use crate::arrays::{VarBinArray, VarBinVTable};
5use crate::compute::{IsConstantKernel, IsConstantKernelAdapter, IsConstantOpts};
6use crate::register_kernel;
7
8impl IsConstantKernel for VarBinVTable {
9    fn is_constant(
10        &self,
11        array: &VarBinArray,
12        opts: &IsConstantOpts,
13    ) -> VortexResult<Option<bool>> {
14        if opts.is_negligible_cost() {
15            return Ok(None);
16        }
17        array.with_iterator(compute_is_constant).map(Some)
18    }
19}
20
21register_kernel!(IsConstantKernelAdapter(VarBinVTable).lift());
22
23pub(super) fn compute_is_constant(iter: &mut dyn Iterator<Item = Option<&[u8]>>) -> bool {
24    let Some(first_value) = iter.next() else {
25        return false;
26    };
27    for v in iter {
28        if v != first_value {
29            return false;
30        }
31    }
32    true
33}