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