vortex_alp/alp_rd/
slice.rs1use std::ops::Range;
5
6use vortex_array::ArrayRef;
7use vortex_array::ArrayView;
8use vortex_array::ExecutionCtx;
9use vortex_array::IntoArray;
10use vortex_array::arrays::slice::SliceKernel;
11use vortex_error::VortexResult;
12
13use crate::ALPRDArrayExt;
14use crate::ALPRDArraySlotsExt;
15use crate::alp_rd::ALPRD;
16
17impl SliceKernel for ALPRD {
18 fn slice(
19 array: ArrayView<'_, Self>,
20 range: Range<usize>,
21 ctx: &mut ExecutionCtx,
22 ) -> VortexResult<Option<ArrayRef>> {
23 let left_parts_exceptions = array
24 .left_parts_patches()
25 .map(|patches| patches.slice(range.clone(), ctx))
26 .transpose()?
27 .flatten();
28
29 Ok(Some(unsafe {
31 ALPRD::new_unchecked(
32 array.dtype().clone(),
33 array.left_parts().slice(range.clone())?,
34 array.left_parts_dictionary().clone(),
35 array.right_parts().slice(range)?,
36 array.right_bit_width(),
37 left_parts_exceptions,
38 )
39 .into_array()
40 }))
41 }
42}