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