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 predicatePackedMask: 750 KB per predicate (8x reduction)
§Performance Benefits
- Bitwise AND is a native SIMD instruction (
vpandon x86,andon 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
impl PackedMask
Sourcepub fn new_all_set(len: usize) -> Self
pub fn new_all_set(len: usize) -> Self
Creates a new mask with all bits set (all rows pass).
Sourcepub fn new_all_clear(len: usize) -> Self
pub fn new_all_clear(len: usize) -> Self
Creates a new mask with all bits clear (no rows pass).
Sourcepub fn and_inplace(&mut self, other: &PackedMask)
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.
Sourcepub fn or_inplace(&mut self, other: &PackedMask)
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.
Sourcepub fn not(&self) -> PackedMask
pub fn not(&self) -> PackedMask
Returns a new mask with all bits inverted.
This is used for NOT IN operations.
Sourcepub fn count_ones(&self) -> usize
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.
Sourcepub fn from_bool_slice(slice: &[bool]) -> Self
pub fn from_bool_slice(slice: &[bool]) -> Self
Creates a packed mask from a boolean slice.
Used for compatibility with existing code during migration.
Sourcepub fn to_bool_vec(&self) -> Vec<bool>
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.
Trait Implementations§
Source§impl Clone for PackedMask
impl Clone for PackedMask
Source§fn clone(&self) -> PackedMask
fn clone(&self) -> PackedMask
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PackedMask
impl Debug for PackedMask
Source§impl PartialEq for PackedMask
impl PartialEq for PackedMask
impl Eq for PackedMask
impl StructuralPartialEq for PackedMask
Auto Trait Implementations§
impl Freeze for PackedMask
impl RefUnwindSafe for PackedMask
impl Send for PackedMask
impl Sync for PackedMask
impl Unpin for PackedMask
impl UnwindSafe for PackedMask
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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