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