vortex_array/arrays/primitive/
ops.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use 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}