vortex_array/arrays/primitive/
ops.rs

1use vortex_dtype::match_each_native_ptype;
2use vortex_error::VortexResult;
3use vortex_scalar::Scalar;
4
5use crate::arrays::{PrimitiveArray, PrimitiveVTable};
6use crate::vtable::{OperationsVTable, ValidityHelper};
7use crate::{ArrayRef, IntoArray};
8
9impl OperationsVTable<PrimitiveVTable> for PrimitiveVTable {
10    fn slice(array: &PrimitiveArray, start: usize, stop: usize) -> VortexResult<ArrayRef> {
11        match_each_native_ptype!(array.ptype(), |T| {
12            Ok(PrimitiveArray::new(
13                array.buffer::<T>().slice(start..stop),
14                array.validity().slice(start, stop)?,
15            )
16            .into_array())
17        })
18    }
19
20    fn scalar_at(array: &PrimitiveArray, index: usize) -> VortexResult<Scalar> {
21        Ok(match_each_native_ptype!(array.ptype(), |T| {
22            Scalar::primitive(array.as_slice::<T>()[index], array.dtype().nullability())
23        }))
24    }
25}