Skip to main content

TakeReduce

Trait TakeReduce 

Source
pub trait TakeReduce: VTable {
    // Required method
    fn take(
        array: &Self::Array,
        indices: &ArrayRef,
    ) -> VortexResult<Option<ArrayRef>>;
}

Required Methods§

Source

fn take( array: &Self::Array, indices: &ArrayRef, ) -> VortexResult<Option<ArrayRef>>

Take elements from an array at the given indices without reading buffers.

This trait is for take implementations that can operate purely on array metadata and structure without needing to read or execute on the underlying buffers. Implementations should return None if taking requires buffer access.

§Preconditions

The indices are guaranteed to be non-empty.

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§

Source§

impl TakeReduce for ConstantVTable

Source§

impl TakeReduce 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.

Source§

impl TakeReduce for MaskedVTable

Source§

impl TakeReduce for NullVTable

Source§

impl TakeReduce for StructVTable