vortex_array/arrays/chunked/compute/
binary_numeric.rs

1use vortex_error::VortexResult;
2use vortex_scalar::BinaryNumericOperator;
3
4use crate::arrays::{ChunkedArray, ChunkedEncoding};
5use crate::compute::{BinaryNumericFn, binary_numeric, slice};
6use crate::{Array, ArrayRef};
7
8impl BinaryNumericFn<&ChunkedArray> for ChunkedEncoding {
9    fn binary_numeric(
10        &self,
11        array: &ChunkedArray,
12        rhs: &dyn Array,
13        op: BinaryNumericOperator,
14    ) -> VortexResult<Option<ArrayRef>> {
15        let mut start = 0;
16
17        let mut new_chunks = Vec::with_capacity(array.nchunks());
18        for chunk in array.non_empty_chunks() {
19            let end = start + chunk.len();
20            new_chunks.push(binary_numeric(chunk, &slice(rhs, start, end)?, op)?);
21            start = end;
22        }
23
24        ChunkedArray::try_new(new_chunks, array.dtype().clone())
25            .map(|c| c.into_array())
26            .map(Some)
27    }
28}