PackedMask

Struct PackedMask 

Source
pub struct PackedMask { /* private fields */ }
Expand description

A packed bitmask where each bit represents whether a row passes a filter.

§Memory Efficiency

For 6M rows (lineitem at TPC-H SF 1):

  • Vec<bool>: 6 MB per predicate
  • PackedMask: 750 KB per predicate (8x reduction)

§Performance Benefits

  • Bitwise AND is a native SIMD instruction (vpand on x86, and on ARM)
  • Better cache utilization due to reduced memory footprint
  • Faster popcount using count_ones() intrinsic

§Implementation

Bits are stored in little-endian order within each u64 word:

  • Bit 0 of word 0 = row 0
  • Bit 63 of word 0 = row 63
  • Bit 0 of word 1 = row 64
  • etc.

Implementations§

Source§

impl PackedMask

Source

pub fn new_all_set(len: usize) -> Self

Creates a new mask with all bits set (all rows pass).

Source

pub fn new_all_clear(len: usize) -> Self

Creates a new mask with all bits clear (no rows pass).

Source

pub fn len(&self) -> usize

Returns the number of rows this mask represents.

Source

pub fn is_empty(&self) -> bool

Returns true if this mask is empty.

Source

pub fn get(&self, index: usize) -> bool

Gets the value of the bit at the given index.

Source

pub fn set(&mut self, index: usize, value: bool)

Sets the bit at the given index.

Source

pub fn and_inplace(&mut self, other: &PackedMask)

Performs in-place bitwise AND with another mask.

This is the key operation for combining multiple predicates. Uses native bitwise AND which maps directly to SIMD instructions.

Source

pub fn or_inplace(&mut self, other: &PackedMask)

Performs in-place bitwise OR with another mask.

This is used for combining multiple predicates in IN lists. Uses native bitwise OR which maps directly to SIMD instructions.

Source

pub fn not(&self) -> PackedMask

Returns a new mask with all bits inverted.

This is used for NOT IN operations.

Source

pub fn count_ones(&self) -> usize

Counts the number of set bits (rows that pass the filter).

Uses the count_ones() intrinsic which maps to hardware popcount.

Source

pub fn from_bool_slice(slice: &[bool]) -> Self

Creates a packed mask from a boolean slice.

Used for compatibility with existing code during migration.

Source

pub fn to_bool_vec(&self) -> Vec<bool>

Converts this packed mask back to a boolean vector.

Used for compatibility with existing code during migration.

Source

pub fn words(&self) -> &[u64]

Returns a reference to the underlying word slice.

Trait Implementations§

Source§

impl Clone for PackedMask

Source§

fn clone(&self) -> PackedMask

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for PackedMask

Source§

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

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

impl PartialEq for PackedMask

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · 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 PackedMask

Source§

impl StructuralPartialEq for PackedMask

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<G1, G2> Within<G2> for G1
where G2: Contains<G1>,

Source§

fn is_within(&self, b: &G2) -> bool

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,