pub struct BitSet<I = usize>(/* private fields */);
Expand description
A simple unbounded bitset that fits in 2 usize
s worth of memory
It resizes its heap allocation whenever a number that wouldn’t otherwise fit in memory is added and doesn’t ever shrink its memory so it could end of wasting memory if a very large element is added and then removed
Implementations§
Source§impl<I: Into<usize>> BitSet<I>
impl<I: Into<usize>> BitSet<I>
Sourcepub fn insert(&mut self, x: I) -> bool
pub fn insert(&mut self, x: I) -> bool
Adds an element to the set
If the set did not have this value present, true is returned.
If the set did have this value present, false is returned.
use default_vec2::BitSet;
let mut s: BitSet<usize> = BitSet::default();
assert!(s.insert(0));
assert!(!s.insert(0));
Sourcepub fn remove(&mut self, x: I) -> bool
pub fn remove(&mut self, x: I) -> bool
Removes an element form the set.
Returns whether the value was present in the set.
use default_vec2::BitSet;
let mut s: BitSet<usize> = BitSet::default();
assert!(!s.remove(0));
s.insert(0);
assert!(s.remove(0));
assert!(!s.remove(0))
Sourcepub fn set(&mut self, x: I, v: bool) -> bool
pub fn set(&mut self, x: I, v: bool) -> bool
Inserts x
if v
is true, or removes it otherwise.
Returns whether self
used to contain x
use default_vec2::BitSet;
let mut s: BitSet<usize> = BitSet::default();
assert!(!s.set(0, false));
assert!(!s.set(0, true));
assert!(s.set(0, true));
assert!(s.set(0, false));
Sourcepub fn contains_mut(&mut self, x: I) -> bool
pub fn contains_mut(&mut self, x: I) -> bool
Same as contains but already reserves space for x
Trait Implementations§
Source§impl<'a, I> BitAndAssign<&'a BitSet> for BitSet<I>
impl<'a, I> BitAndAssign<&'a BitSet> for BitSet<I>
Source§fn bitand_assign(&mut self, rhs: &'a BitSet)
fn bitand_assign(&mut self, rhs: &'a BitSet)
Sets *self
to the intersection of self
and other
§Example:
use default_vec2::BitSet;
let mut s1: BitSet<usize> = BitSet::from_iter([0, 1]);
let s2 = BitSet::from_iter([0, 42]);
s1 &= &s2;
assert_eq!(vec![0], s1.iter().collect::<Vec<_>>());
Source§impl<'a, I> BitOrAssign<&'a BitSet> for BitSet<I>
impl<'a, I> BitOrAssign<&'a BitSet> for BitSet<I>
Source§fn bitor_assign(&mut self, rhs: &'a BitSet)
fn bitor_assign(&mut self, rhs: &'a BitSet)
Sets *self
to the intersection of self
and other
§Example:
use default_vec2::BitSet;
let mut s1: BitSet<usize> = BitSet::from_iter([0, 1]);
let s2 = BitSet::from_iter([0, 42]);
s1 |= &s2;
assert_eq!(vec![0, 1, 42], s1.iter().collect::<Vec<_>>());
Source§impl<'a, I> BitXorAssign<&'a BitSet> for BitSet<I>
impl<'a, I> BitXorAssign<&'a BitSet> for BitSet<I>
Source§fn bitxor_assign(&mut self, rhs: &'a BitSet)
fn bitxor_assign(&mut self, rhs: &'a BitSet)
Sets *self
to the set symmetric difference of self
and other
§Example:
use default_vec2::BitSet;
let mut s1: BitSet<usize> = BitSet::from_iter([0, 1]);
let s2 = BitSet::from_iter([0, 42]);
s1 ^= &s2;
assert_eq!(vec![1, 42], s1.iter().collect::<Vec<_>>());
Source§impl<I: Into<usize>> Extend<I> for BitSet<I>
impl<I: Into<usize>> Extend<I> for BitSet<I>
Source§fn extend<T: IntoIterator<Item = I>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = I>>(&mut self, iter: T)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl<I: Into<usize>> FromIterator<I> for BitSet<I>
impl<I: Into<usize>> FromIterator<I> for BitSet<I>
Source§fn from_iter<T: IntoIterator<Item = I>>(iter: T) -> Self
fn from_iter<T: IntoIterator<Item = I>>(iter: T) -> Self
Source§impl<'a, I> SubAssign<&'a BitSet> for BitSet<I>
impl<'a, I> SubAssign<&'a BitSet> for BitSet<I>
Source§fn sub_assign(&mut self, rhs: &'a BitSet)
fn sub_assign(&mut self, rhs: &'a BitSet)
Sets *self
to the set difference of self
and other
§Example:
use default_vec2::BitSet;
let mut s1: BitSet<usize> = BitSet::from_iter([0, 1]);
let s2 = BitSet::from_iter([0, 42]);
s1 -= &s2;
assert_eq!(vec![1], s1.iter().collect::<Vec<_>>());