use vortex_array::ArrayRef;
use vortex_array::ExecutionCtx;
use vortex_array::arrays::PrimitiveArray;
use vortex_array::builtins::ArrayBuiltins;
use vortex_array::dtype::DType;
use vortex_array::dtype::NativePType;
use vortex_buffer::Buffer;
use vortex_error::VortexResult;
use vortex_error::vortex_err;
pub(crate) fn collect_widened<T: NativePType>(
arr: &ArrayRef,
ctx: &mut ExecutionCtx,
) -> VortexResult<Buffer<T>> {
let dtype = DType::Primitive(T::PTYPE, arr.dtype().nullability());
Ok(arr
.cast(dtype)?
.execute::<PrimitiveArray>(ctx)?
.into_buffer::<T>())
}
pub(crate) fn code_boundary_at(
codes_offsets: &ArrayRef,
index: usize,
ctx: &mut ExecutionCtx,
) -> VortexResult<usize> {
codes_offsets
.execute_scalar(index, ctx)?
.as_primitive()
.as_::<usize>()
.ok_or_else(|| vortex_err!("OnPair codes_offsets[{index}] is null"))
}