Struct U32Set

Source
pub struct U32Set {
    pages: Vec<BitPage>,
    page_map: Vec<PageInfo>,
    length: u64,
    last_page_map_index: AtomicUsize,
}
Expand description

A fast, efficient, sparse, & ordered u32 set.

For a higher-level API that supports inversion and generic int types, use super::IntSet

Fields§

§pages: Vec<BitPage>§page_map: Vec<PageInfo>§length: u64§last_page_map_index: AtomicUsize

Implementations§

Source§

impl U32Set

Source

pub fn insert(&mut self, val: u32) -> bool

Add val as a member of this set.

If the set did not previously contain this value, returns true.

Source

pub fn insert_range(&mut self, range: RangeInclusive<u32>)

Add all values in range as members of this set.

Source

pub fn extend_unsorted<U: IntoIterator<Item = u32>>(&mut self, iter: U)

An alternate version of extend() which is optimized for inserting an unsorted iterator of values.

Source

pub fn remove(&mut self, val: u32) -> bool

Remove val from this set.

Returns true if the value was present.

Source

pub fn remove_all<U: IntoIterator<Item = u32>>(&mut self, iter: U)

Source

pub fn remove_range(&mut self, range: RangeInclusive<u32>)

Removes all values in range as members of this set.

Source

pub fn contains(&self, val: u32) -> bool

Returns true if val is a member of this set.

Source

pub const fn empty() -> U32Set

Source

pub fn clear(&mut self)

Remove all members from this set.

Source

pub fn is_empty(&self) -> bool

Return true if there are no members in this set.

Source

fn recompute_length(&mut self)

Source

pub fn len(&self) -> u64

Returns the number of members in this set.

Source

pub(crate) fn num_pages(&self) -> usize

Source

pub fn union(&mut self, other: &U32Set)

Sets the members of this set to the union of self and other.

Source

pub fn intersect(&mut self, other: &U32Set)

Sets the members of this set to the intersection of self and other.

Source

pub fn subtract(&mut self, other: &U32Set)

Sets the members of this set to self - other.

Source

pub fn reversed_subtract(&mut self, other: &U32Set)

Sets the members of this set to other - self.

Source

pub fn iter(&self) -> impl DoubleEndedIterator<Item = u32> + '_

Iterator over the members of this set. In sorted order (ascending).

Source

pub fn iter_from(&self, value: u32) -> impl Iterator<Item = u32> + '_

Iterator over the members of this set starting from value.

So value is included in the iterator if it’s in the set.

Source

pub fn iter_ranges(&self) -> impl Iterator<Item = RangeInclusive<u32>> + '_

Iterate over the ranges of contiguous values in this set.

Source

fn iter_pages(&self) -> impl DoubleEndedIterator<Item = (u32, &BitPage)> + '_

Source

fn iter_non_empty_pages( &self, ) -> impl DoubleEndedIterator<Item = (u32, &BitPage)> + '_

Source

fn passthrough_behavior<Op>(op: &Op) -> (bool, bool)
where Op: Fn(&BitPage, &BitPage) -> BitPage,

Determine the passthrough behaviour of the operator.

The passthrough behaviour is what happens to a page on one side of the operation if the other side is 0. For example union passes through both left and right sides since it preserves the left or right side when the other side is 0. Knowing this lets us optimize some cases when only one page is present on one side.

Source

fn process<Op>(&mut self, op: Op, other: &U32Set)
where Op: Fn(&BitPage, &BitPage) -> BitPage,

Source

fn compact(&mut self, new_len: usize)

Source

fn compact_pages(&mut self, old_index_to_page_map_index: Vec<usize>)

Source

fn resize(&mut self, new_len: usize)

Source

const fn get_major_value(value: u32) -> u32

Return the major value (top 23 bits) of the page associated with value.

Source

const fn major_start(major: u32) -> u32

Source

const fn major_end(major: u32) -> u32

Source

fn page_index_for_major(&self, major_value: u32) -> Option<usize>

Returns the index in self.pages (if it exists) for the page with the same major as major_value.

Source

fn page_map_index_for_major(&self, major_value: u32) -> Option<usize>

Source

fn ensure_page_index_for_major(&mut self, major_value: u32) -> usize

Returns the index in self.pages for the page with the same major as major_value. Will create the page if it does not yet exist.

Source

fn page_for_mut(&mut self, value: u32) -> Option<&mut BitPage>

Return a mutable reference to the page that value resides in.

Insert a new page if it doesn’t exist.

Source

fn page_for_major_mut(&mut self, major_value: u32) -> Option<&mut BitPage>

Return a mutable reference to the page with major value equal to major_value.

Source

fn ensure_page_for_mut(&mut self, value: u32) -> &mut BitPage

Return a mutable reference to the page that value resides in.

Insert a new page if it doesn’t exist.

Source

fn ensure_page_for_major_mut(&mut self, major_value: u32) -> &mut BitPage

Return a mutable reference to the page with major value equal to major_value. Inserts a new page if it doesn’t exist.

Source

fn page_for_index_mut(&mut self, index: usize) -> Option<&mut BitPage>

Return the mutable page at a given index

Source

fn page_for_index(&self, index: usize) -> Option<&BitPage>

Trait Implementations§

Source§

impl Clone for U32Set

Source§

fn clone(&self) -> Self

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 U32Set

Source§

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

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

impl Default for U32Set

Source§

fn default() -> Self

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

impl Extend<u32> for U32Set

Source§

fn extend<U: IntoIterator<Item = u32>>(&mut self, iter: U)

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl FromIterator<u32> for U32Set

Source§

fn from_iter<I: IntoIterator<Item = u32>>(iter: I) -> Self

Creates a value from an iterator. Read more
Source§

impl Hash for U32Set

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for U32Set

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for U32Set

Source§

fn eq(&self, other: &Self) -> 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 PartialOrd for U32Set

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Eq for U32Set

Auto Trait Implementations§

§

impl !Freeze for U32Set

§

impl RefUnwindSafe for U32Set

§

impl Send for U32Set

§

impl Sync for U32Set

§

impl Unpin for U32Set

§

impl UnwindSafe for U32Set

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