vortex_array/arrays/varbin/compute/
is_constant.rs

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