use smallvec::smallvec;
use vortex_error::VortexResult;
use crate::ArrayRef;
use crate::array::Array;
use crate::array::ArrayParts;
use crate::array::EmptyArrayData;
use crate::array::TypedArrayRef;
use crate::array_slots;
use crate::arrays::PiecewiseSequence;
use crate::dtype::PType;
#[array_slots(PiecewiseSequence)]
pub struct PiecewiseSequenceSlots {
pub starts: ArrayRef,
pub lengths: ArrayRef,
pub multipliers: ArrayRef,
}
pub trait PiecewiseSequenceArrayExt:
TypedArrayRef<PiecewiseSequence> + PiecewiseSequenceArraySlotsExt
{
}
impl<T: TypedArrayRef<PiecewiseSequence>> PiecewiseSequenceArrayExt for T {}
impl Array<PiecewiseSequence> {
pub fn try_new(
starts: ArrayRef,
lengths: ArrayRef,
multipliers: ArrayRef,
len: usize,
) -> VortexResult<Self> {
Array::try_from_parts(
ArrayParts::new(PiecewiseSequence, PType::U64.into(), len, EmptyArrayData)
.with_slots(smallvec![Some(starts), Some(lengths), Some(multipliers)]),
)
}
pub unsafe fn new_unchecked(
starts: ArrayRef,
lengths: ArrayRef,
multipliers: ArrayRef,
len: usize,
) -> Self {
unsafe {
Array::from_parts_unchecked(
ArrayParts::new(PiecewiseSequence, PType::U64.into(), len, EmptyArrayData)
.with_slots(smallvec![Some(starts), Some(lengths), Some(multipliers)]),
)
}
}
}