vortex_array/arrays/piecewise_sequence/
array.rs1use smallvec::smallvec;
5use vortex_error::VortexResult;
6
7use crate::ArrayRef;
8use crate::array::Array;
9use crate::array::ArrayParts;
10use crate::array::EmptyArrayData;
11use crate::array::TypedArrayRef;
12use crate::array_slots;
13use crate::arrays::PiecewiseSequence;
14use crate::dtype::PType;
15
16#[array_slots(PiecewiseSequence)]
17pub struct PiecewiseSequenceSlots {
18 pub starts: ArrayRef,
20 pub lengths: ArrayRef,
22 pub multipliers: ArrayRef,
24}
25
26pub trait PiecewiseSequenceArrayExt:
28 TypedArrayRef<PiecewiseSequence> + PiecewiseSequenceArraySlotsExt
29{
30}
31impl<T: TypedArrayRef<PiecewiseSequence>> PiecewiseSequenceArrayExt for T {}
32
33impl Array<PiecewiseSequence> {
34 pub fn try_new(
41 starts: ArrayRef,
42 lengths: ArrayRef,
43 multipliers: ArrayRef,
44 len: usize,
45 ) -> VortexResult<Self> {
46 Array::try_from_parts(
47 ArrayParts::new(PiecewiseSequence, PType::U64.into(), len, EmptyArrayData)
48 .with_slots(smallvec![Some(starts), Some(lengths), Some(multipliers)]),
49 )
50 }
51
52 pub unsafe fn new_unchecked(
58 starts: ArrayRef,
59 lengths: ArrayRef,
60 multipliers: ArrayRef,
61 len: usize,
62 ) -> Self {
63 unsafe {
64 Array::from_parts_unchecked(
65 ArrayParts::new(PiecewiseSequence, PType::U64.into(), len, EmptyArrayData)
66 .with_slots(smallvec![Some(starts), Some(lengths), Some(multipliers)]),
67 )
68 }
69 }
70}