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