use std::ops::Range;
use vortex_error::VortexResult;
use crate::ArrayRef;
use crate::IntoArray;
use crate::array::ArrayView;
use crate::arrays::Primitive;
use crate::arrays::PrimitiveArray;
use crate::arrays::slice::SliceReduce;
use crate::dtype::NativePType;
use crate::match_each_native_ptype;
impl SliceReduce for Primitive {
fn slice(array: ArrayView<'_, Self>, range: Range<usize>) -> VortexResult<Option<ArrayRef>> {
let result = match_each_native_ptype!(array.ptype(), |T| {
PrimitiveArray::from_buffer_handle(
array.buffer_handle().slice_typed::<T>(range.clone()),
T::PTYPE,
array.validity()?.slice(range)?,
)
.into_array()
});
Ok(Some(result))
}
}