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