vortex_array/arrays/masked/vtable/
operations.rs1use 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}