Skip to main content

AdaptiveSelection

Enum AdaptiveSelection 

Source
pub enum AdaptiveSelection {
    Empty {
        nrows: usize,
    },
    All {
        nrows: usize,
    },
    SelectionVector {
        rows: Vec<u32>,
        nrows: usize,
    },
    VerbatimMask {
        mask: BitMask,
    },
    Hybrid {
        nrows: usize,
        chunks: Vec<HybridChunk>,
    },
}
Expand description

A row-selection representation chosen adaptively by density.

All variants carry nrows (the size of the underlying DataFrame) so that count/contains/iteration are answerable without consulting the base.

Variants§

§

Empty

No rows selected. nrows is the underlying frame size.

Fields

§nrows: usize
§

All

Every row selected.

Fields

§nrows: usize
§

SelectionVector

Sparse: ascending u32 row indices.

Fields

§rows: Vec<u32>
§nrows: usize
§

VerbatimMask

Dense: backing BitMask.

Fields

§mask: BitMask
§

Hybrid

Mid-density chunked representation. chunks.len() == ceil(nrows / HYBRID_CHUNK_SIZE).

Fields

§nrows: usize

Implementations§

Source§

impl AdaptiveSelection

Source

pub fn all(nrows: usize) -> Self

All rows selected.

Source

pub fn empty(nrows: usize) -> Self

No rows selected.

Source

pub fn from_bitmask(mask: BitMask) -> Self

Wrap a BitMask directly (force the dense arm). Used by call sites that already produced a mask through the existing pipeline and do not want a re-classification.

Source

pub fn from_predicate_result(words: Vec<u64>, nrows: usize) -> Self

Construct from raw predicate-result words (LSB-first within each u64).

This is the canonical entry point from try_eval_predicate_columnar and the row-wise filter fallback. The classifier:

  1. Counts set bits across words.
  2. Picks Empty/All/SelectionVector/VerbatimMask per density.
  3. Mid-band selections become Hybrid when nrows >= 2 * HYBRID_CHUNK_SIZE.

The caller is responsible for masking off tail bits past nrows before invoking — BitMask::all_true / BitMask::from_bools and the columnar predicate path already do this.

Source

pub fn from_words_with_count( words: Vec<u64>, nrows: usize, count: usize, ) -> Self

Test-only and conversion helper — same as from_predicate_result but caller already knows the count.

Source

pub fn nrows(&self) -> usize

Total number of rows in the underlying DataFrame.

Source

pub fn count(&self) -> usize

Number of rows actually selected.

Source

pub fn contains(&self, row: usize) -> bool

True if row is in the selection. Out-of-range rows return false.

Source

pub fn iter_indices(&self) -> SelectionIndices<'_>

Iterate selected rows in ascending order.

Source

pub fn materialize_mask(&self) -> BitMask

Materialize the selection as a BitMask. Always allocates O(nrows/64).

Source

pub fn materialize_indices(&self) -> Vec<u32>

Materialize the selection as an ascending Vec<u32> of row indices.

Source

pub fn intersect(&self, other: &AdaptiveSelection) -> AdaptiveSelection

Intersection (AND). Output mode is re-classified by density.

Panics if nrows differ — programming error (different base frames).

Source

pub fn union(&self, other: &AdaptiveSelection) -> AdaptiveSelection

Union (OR). Output mode re-classified by density.

Source

pub fn explain_selection_mode(&self) -> &'static str

Stable identifier of the chosen mode. Useful for debug, tests, and the planned explain_selection_mode user-facing call.

Trait Implementations§

Source§

impl Clone for AdaptiveSelection

Source§

fn clone(&self) -> AdaptiveSelection

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AdaptiveSelection

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for AdaptiveSelection

Source§

fn eq(&self, other: &AdaptiveSelection) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for AdaptiveSelection

Source§

impl StructuralPartialEq for AdaptiveSelection

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.