pub trait TakeKernel: VTable {
// Required method
fn take(
&self,
array: &Self::Array,
indices: &dyn Array,
) -> VortexResult<ArrayRef>;
}
Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
impl TakeKernel for BoolVTable
impl TakeKernel for ChunkedVTable
impl TakeKernel for ConstantVTable
impl TakeKernel for DecimalVTable
impl TakeKernel for ExtensionVTable
impl TakeKernel for FixedSizeListVTable
Take implementation for FixedSizeListArray
.
Unlike ListView
, FixedSizeListArray
must rebuild the elements array because it requires
that elements start at offset 0 and be perfectly packed without gaps. We expand list indices
into element indices and push them down to the child elements array.
impl TakeKernel for ListVTable
Take implementation for ListArray
.
This implementation converts the ListArray
to a ListViewArray
and then delegates to its
take
implementation. This approach avoids the need to rebuild the elements
array.
The resulting ListViewArray
can represent non-contiguous and out-of-order lists, which would
violate ListArray
’s invariants (but not ListViewArray
’s).
impl TakeKernel for ListViewVTable
ListViewArray
take implementation.
This implementation is deliberately simple and read-optimized. We just take the offsets
and
sizes
at the requested indices and reuse the original elements
array. This works because
ListView
(unlike List
) allows non-contiguous and out-of-order lists.
We don’t slice the elements
array because it would require computing min/max offsets and
adjusting all offsets accordingly, which is not really worth the small potential memory we would
be able to get back.
The trade-off is that we may keep unreferenced elements in memory, but this is acceptable since we’re optimizing for read performance and the data isn’t being copied.
impl TakeKernel for MaskedVTable
impl TakeKernel for NullVTable
impl TakeKernel for PrimitiveVTable
impl TakeKernel for StructVTable
impl TakeKernel for VarBinVTable
impl TakeKernel for VarBinViewVTable
Take involves creating a new array that references the old array, just with the given set of views.