Struct columnar::sums::rank_select::RankSelect

source ·
pub struct RankSelect<CC = Vec<u64>, VC = Vec<u64>, WC = u64> {
    pub counts: CC,
    pub values: Bools<VC, WC>,
}
Expand description

A store for maintaining Vec<bool> with fast rank and select access.

The design is to have u64 running counts for each block of 1024 bits, which are roughly the size of a cache line. This is roughly 6% overhead, above the bits themselves, which seems pretty solid.

Fields§

§counts: CC

Counts of the number of cumulative set (true) bits, after each block of 1024 bits.

§values: Bools<VC, WC>

The bits themselves.

Implementations§

source§

impl<CC: Container<u64>, VC: Container<u64>> RankSelect<CC, VC>

source

pub fn borrow<'a>( &'a self, ) -> RankSelect<CC::Borrowed<'a>, VC::Borrowed<'a>, &'a u64>

source§

impl<CC, VC: Len + IndexAs<u64>, WC: Copy + CopyAs<u64>> RankSelect<CC, VC, WC>

source

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

source§

impl<CC: Len + IndexAs<u64>, VC: Len + IndexAs<u64>, WC: Copy + CopyAs<u64>> RankSelect<CC, VC, WC>

source

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

The number of set bits strictly preceding index.

This number is accumulated first by reading out of self.counts at the correct position, then by summing the ones in strictly prior u64 entries, then by counting the ones in the masked u64 in which the bit lives.

source

pub fn select(&self, rank: u64) -> Option<usize>

The index of the rankth set bit, should one exist.

source§

impl<CC, VC: Len, WC: Copy + CopyAs<u64>> RankSelect<CC, VC, WC>

source

pub fn len(&self) -> usize

source§

impl<CC: Push<u64> + Len + IndexAs<u64>, VC: Push<u64> + Len + IndexAs<u64>> RankSelect<CC, VC>

source

pub fn push(&mut self, bit: bool)

Trait Implementations§

source§

impl<'a, CC: AsBytes<'a>, VC: AsBytes<'a>> AsBytes<'a> for RankSelect<CC, VC, &'a u64>

source§

fn as_bytes(&self) -> impl Iterator<Item = (u64, &'a [u8])>

Presents self as a sequence of byte slices, with their required alignment.
source§

fn length_in_words(&self) -> usize

The number of u64 words required to record self as aligned bytes.
source§

impl<CC: Clear, VC: Clear> Clear for RankSelect<CC, VC>

source§

fn clear(&mut self)

Clears self, without changing its capacity.
source§

impl<CC: Clone, VC: Clone, WC: Clone> Clone for RankSelect<CC, VC, WC>

source§

fn clone(&self) -> RankSelect<CC, VC, WC>

Returns a copy 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<CC: Debug, VC: Debug, WC: Debug> Debug for RankSelect<CC, VC, WC>

source§

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

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

impl<CC: Default, VC: Default, WC: Default> Default for RankSelect<CC, VC, WC>

source§

fn default() -> RankSelect<CC, VC, WC>

Returns the “default value” for a type. Read more
source§

impl<'de, CC, VC, WC> Deserialize<'de> for RankSelect<CC, VC, WC>
where CC: Deserialize<'de>, VC: Deserialize<'de>, WC: Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<'a, CC: FromBytes<'a>, VC: FromBytes<'a>> FromBytes<'a> for RankSelect<CC, VC, &'a u64>

source§

fn from_bytes(bytes: &mut impl Iterator<Item = &'a [u8]>) -> Self

Reconstructs self from a sequence of correctly aligned and sized bytes slices. Read more
source§

impl<CC: HeapSize, VC: HeapSize> HeapSize for RankSelect<CC, VC>

source§

fn heap_size(&self) -> (usize, usize)

Active (len) and allocated (cap) heap sizes in bytes. This should not include the size of self itself.
source§

impl<CC: PartialEq, VC: PartialEq, WC: PartialEq> PartialEq for RankSelect<CC, VC, WC>

source§

fn eq(&self, other: &RankSelect<CC, VC, WC>) -> 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<CC, VC, WC> Serialize for RankSelect<CC, VC, WC>
where CC: Serialize, VC: Serialize, WC: Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<CC: Copy, VC: Copy, WC: Copy> Copy for RankSelect<CC, VC, WC>

source§

impl<CC, VC, WC> StructuralPartialEq for RankSelect<CC, VC, WC>

Auto Trait Implementations§

§

impl<CC, VC, WC> Freeze for RankSelect<CC, VC, WC>
where CC: Freeze, VC: Freeze, WC: Freeze,

§

impl<CC, VC, WC> RefUnwindSafe for RankSelect<CC, VC, WC>

§

impl<CC, VC, WC> Send for RankSelect<CC, VC, WC>
where CC: Send, VC: Send, WC: Send,

§

impl<CC, VC, WC> Sync for RankSelect<CC, VC, WC>
where CC: Sync, VC: Sync, WC: Sync,

§

impl<CC, VC, WC> Unpin for RankSelect<CC, VC, WC>
where CC: Unpin, VC: Unpin, WC: Unpin,

§

impl<CC, VC, WC> UnwindSafe for RankSelect<CC, VC, WC>
where CC: UnwindSafe, VC: UnwindSafe, WC: UnwindSafe,

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§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

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

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

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

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

impl<T> CopyAs<T> for T

source§

fn copy_as(self) -> T

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> ToOwned for T
where T: Clone,

§

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>,

§

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>,

§

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<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,