Skip to main content

vortex_array/arrays/primitive/vtable/
operations.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_error::VortexResult;
5
6use crate::ExecutionCtx;
7use crate::array::ArrayView;
8use crate::array::OperationsVTable;
9use crate::array::ProbeState;
10use crate::arrays::Primitive;
11use crate::match_each_native_ptype;
12use crate::scalar::Scalar;
13
14impl OperationsVTable<Primitive> for Primitive {
15    type ProbeState = ();
16
17    fn probe_scalar(
18        state: &mut ProbeState<'_, Primitive>,
19        index: usize,
20        ctx: &mut ExecutionCtx,
21    ) -> VortexResult<Scalar> {
22        let array = state.array();
23        if !state.is_valid(index, ctx)? {
24            return Ok(Scalar::null(array.dtype().clone()));
25        }
26        Ok(match_each_native_ptype!(array.ptype(), |T| {
27            Scalar::primitive(array.as_slice::<T>()[index], array.dtype().nullability())
28        }))
29    }
30
31    fn scalar_at(
32        array: ArrayView<'_, Primitive>,
33        index: usize,
34        ctx: &mut ExecutionCtx,
35    ) -> VortexResult<Scalar> {
36        Self::probe_scalar(&mut ProbeState::once(array), index, ctx)
37    }
38}