Skip to main content

vortex_array/arrays/masked/vtable/
operations.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use vortex_error::VortexResult;
5use vortex_error::vortex_err;
6
7use crate::ExecutionCtx;
8use crate::array::ArrayView;
9use crate::array::OperationsVTable;
10use crate::array::ProbeState;
11use crate::arrays::Masked;
12use crate::arrays::masked::MaskedSlots;
13use crate::scalar::Scalar;
14
15impl OperationsVTable<Masked> for Masked {
16    type ProbeState = ();
17
18    fn probe_scalar(
19        state: &mut ProbeState<'_, Masked>,
20        index: usize,
21        ctx: &mut ExecutionCtx,
22    ) -> VortexResult<Scalar> {
23        if !state.is_valid(index, ctx)? {
24            return Ok(Scalar::null(state.array().dtype().clone()));
25        }
26        Ok(state
27            .slot(MaskedSlots::CHILD)?
28            .ok_or_else(|| vortex_err!("Masked child slot is missing"))?
29            .execute_scalar(index, ctx)?
30            .into_nullable())
31    }
32
33    fn scalar_at(
34        array: ArrayView<'_, Masked>,
35        index: usize,
36        ctx: &mut ExecutionCtx,
37    ) -> VortexResult<Scalar> {
38        Self::probe_scalar(&mut ProbeState::once(array), index, ctx)
39    }
40}