immutable_chunkmap::set

Type Alias SetS

Source
pub type SetS<K> = Set<K, { _ }>;
Expand description

set with a smaller chunk size, faster to update, slower to search

Aliased Type§

struct SetS<K>(/* private fields */);

Implementations

Source§

impl<K, const SIZE: usize> Set<K, SIZE>
where K: Ord + Clone,

Source

pub fn new() -> Self

Create a new empty set

Source

pub fn downgrade(&self) -> WeakSetRef<K, SIZE>

Create a weak reference to this set

Source

pub fn strong_count(&self) -> usize

Return the number of strong references to this set (see Arc)

Source

pub fn weak_count(&self) -> usize

Return the number of weak references to this set (see Arc)

Source

pub fn insert_many<E: IntoIterator<Item = K>>(&self, elts: E) -> Self

This will insert many elements at once, and is potentially a lot faster than inserting one by one, especially if the data is sorted.

#Examples

 use self::immutable_chunkmap::set::SetM;

 let mut v = vec![1, 10, -12, 44, 50];
 v.sort_unstable();

 let m = SetM::new().insert_many(v.iter().map(|k| *k));

 for k in &v {
   assert_eq!(m.contains(k), true)
 }
Source

pub fn remove_many<Q, E>(&self, elts: E) -> Self
where Q: Ord, K: Borrow<Q>, E: IntoIterator<Item = Q>,

Remove multiple elements in a single pass. Similar performance to insert_many.

Source

pub fn update_many<Q, E, F>(&self, elts: E, f: F) -> Self
where Q: Ord, K: Borrow<Q>, E: IntoIterator<Item = Q>, F: FnMut(Q, Option<&K>) -> Option<K>,

This is just slightly wierd, however if you have a bunch of borrowed forms of members of the set, and you want to look at the real entries and possibly add/update/remove them, then this method is for you.

Source

pub fn insert(&self, k: K) -> (Self, bool)

return a new set with k inserted into it. If k already exists in the old set return true, else false. If the element already exists in the set memory will not be allocated.

Source

pub fn insert_cow(&mut self, k: K) -> bool

insert k with copy on write semantics. if self is a unique reference to the set, then k will be inserted in place. Otherwise, only the parts of the set necessary to insert k will be copied, and then the copies will be mutated. self will share all the parts that weren’t modfied with any previous clones.

Source

pub fn contains<'a, Q>(&'a self, k: &Q) -> bool
where Q: ?Sized + Ord, K: Borrow<Q>,

return true if the set contains k, else false. Runs in log(N) time and constant space. where N is the size of the set.

Source

pub fn get<'a, Q>(&'a self, k: &Q) -> Option<&K>
where Q: ?Sized + Ord, K: Borrow<Q>,

return a reference to the item in the set that is equal to the given value, or None if no such value exists.

Source

pub fn remove<Q: Sized + Ord>(&self, k: &Q) -> (Self, bool)
where K: Borrow<Q>,

return a new set with k removed. Runs in log(N) time and log(N) space, where N is the size of the set

Source

pub fn remove_cow<Q: Sized + Ord>(&mut self, k: &Q) -> bool
where K: Borrow<Q>,

remove k from the set in place with copy on write semantics (see insert_cow). return true if k was in the set.

Source

pub fn union(&self, other: &Set<K, SIZE>) -> Self

return the union of 2 sets. Runs in O(log(N) + M) time and space, where N is the largest of the two sets, and M is the number of chunks that intersect, which is roughly proportional to the size of the intersection.

§Examples
use core::iter::FromIterator;
use self::immutable_chunkmap::set::SetM;

let s0 = SetM::from_iter(0..10);
let s1 = SetM::from_iter(5..15);
let s2 = s0.union(&s1);
for i in 0..15 {
    assert!(s2.contains(&i));
}
Source

pub fn intersect(&self, other: &Set<K, SIZE>) -> Self

return the intersection of 2 sets. Runs in O(log(N) + M) time and space, where N is the smallest of the two sets, and M is the number of intersecting chunks.

§Examples

use core::iter::FromIterator; use self::immutable_chunkmap::set::SetM;

let s0 = SetM::from_iter(0..100); let s1 = SetM::from_iter(20..50); let s2 = s0.intersect(&s1);

assert!(s2.len() == 30); for i in 0..100 { if i < 20 || i >= 50 { assert!(!s2.contains(&i)); } else { assert!(s2.contains(&i)); } }

Source

pub fn diff(&self, other: &Set<K, SIZE>) -> Self
where K: Debug,

Return the difference of two sets. Runs in O(log(N) + M) time and space, where N is the smallest of the two sets, and M is the number of intersecting chunks.

§Examples
use core::iter::FromIterator;
use self::immutable_chunkmap::set::SetM;

let s0 = SetM::from_iter(0..100);
let s1 = SetM::from_iter(0..50);
let s2 = s0.diff(&s1);

assert!(s2.len() == 50);
for i in 0..50 {
    assert!(!s2.contains(&i));
}
for i in 50..100 {
    assert!(s2.contains(&i));
}
Source

pub fn len(&self) -> usize

get the number of elements in the map O(1) time and space

Source

pub fn range<'a, Q, R>(&'a self, r: R) -> SetIter<'a, R, Q, K, SIZE>
where Q: Ord + ?Sized + 'a, K: 'a + Clone + Ord + Borrow<Q>, R: RangeBounds<Q> + 'a,

return an iterator over the subset of elements in the set that are within the specified range.

The returned iterator runs in O(log(N) + M) time, and constant space. N is the number of elements in the tree, and M is the number of elements you examine.

if lbound >= ubound the returned iterator will be empty

Trait Implementations

Source§

impl<K: Clone + Ord + Clone, const SIZE: usize> Clone for Set<K, SIZE>

Source§

fn clone(&self) -> Set<K, SIZE>

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<K, const SIZE: usize> Debug for Set<K, SIZE>
where K: Debug + Ord + Clone,

Source§

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

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

impl<K, const SIZE: usize> Default for Set<K, SIZE>
where K: Ord + Clone,

Source§

fn default() -> Set<K, SIZE>

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

impl<K, const SIZE: usize> FromIterator<K> for Set<K, SIZE>
where K: Ord + Clone,

Source§

fn from_iter<T: IntoIterator<Item = K>>(iter: T) -> Self

Creates a value from an iterator. Read more
Source§

impl<K, const SIZE: usize> Hash for Set<K, SIZE>
where K: Hash + Ord + Clone,

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<K, const SIZE: usize> Ord for Set<K, SIZE>
where K: Ord + Clone,

Source§

fn cmp(&self, other: &Set<K, SIZE>) -> 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<K, const SIZE: usize> PartialEq for Set<K, SIZE>
where K: Ord + Clone,

Source§

fn eq(&self, other: &Set<K, SIZE>) -> 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<K, const SIZE: usize> PartialOrd for Set<K, SIZE>
where K: Ord + Clone,

Source§

fn partial_cmp(&self, other: &Set<K, SIZE>) -> 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<K, const SIZE: usize> Eq for Set<K, SIZE>
where K: Eq + Ord + Clone,