Struct bitmac::static_bitmap::StaticBitmap
source · [−]pub struct StaticBitmap<D, B> { /* private fields */ }
Expand description
A bitmap that cannot be resized.
Any structure that implements the ContainerRead
(for read-only access) and ContainerWrite
(for mutable access) traits can be a container of bitmap (e.g. [T; N]
, &[T]
, Vec<T>
, etc.).
Usage example:
use bitmac::{StaticBitmap, LSB};
// You can directly check every single bit
let bitmap = StaticBitmap::<_, LSB>::new([0b0000_0001u8, 0b0000_1000]);
assert!(bitmap.get(0));
assert!(bitmap.get(11));
assert!(!bitmap.get(13));
// Out of bounds bits always return false
assert!(!bitmap.get(128));
// You can iterate over bits
let bitmap = StaticBitmap::<_, LSB>::new([0b0000_1001u8, 0b0000_1000]);
let mut iter = bitmap.iter().by_bits().enumerate();
assert_eq!(iter.next(), Some((0, true)));
assert_eq!(iter.next(), Some((1, false)));
assert_eq!(iter.next(), Some((2, false)));
assert_eq!(iter.next(), Some((3, true)));
assert_eq!(iter.next(), Some((4, false)));
// You can check multiple bits at the same time through the intersection
use bitmac::Intersection;
let bitmap = StaticBitmap::<_, LSB>::new([0b0000_1001u8, 0b0000_1000]);
// .. by creating specific new container for result
let test = [0b0000_1001u8, 0b0000_0000];
assert_eq!(bitmap.intersection::<[u8; 2]>(&test), test);
// .. by using preallocated container for result
let test = [0b0000_1001u8, 0b0000_0000];
let mut result = [0u8; 2];
bitmap.intersection_in(&test, &mut result);
assert_eq!(result, test);
// .. by comparing length of difference that is equivalent to count of ones (bits) in result
let test = [0b0000_1001u8, 0b0000_0000];
assert_eq!(bitmap.intersection_len(&test), test.iter().fold(0, |acc, &v| acc + v.count_ones() as usize));
// You can directly change every single bit
let mut bitmap = StaticBitmap::<_, LSB>::new([0b0000_1001u8, 0b0001_1000]);
assert!(bitmap.get(0));
assert!(bitmap.get(3));
assert!(bitmap.get(11));
assert!(bitmap.get(12));
assert!(!bitmap.get(13));
assert!(!bitmap.get(128));
bitmap.set(12, false);
assert!(!bitmap.get(12));
bitmap.set(13, true);
assert!(bitmap.get(13));
// Out of bounds bits return error
assert!(bitmap.try_set(128, true).is_err());
assert!(!bitmap.get(128));
Implementations
sourceimpl<D, N, B> StaticBitmap<D, B> where
D: ContainerRead<B, Slot = N>,
N: Number,
B: BitAccess,
impl<D, N, B> StaticBitmap<D, B> where
D: ContainerRead<B, Slot = N>,
N: Number,
B: BitAccess,
sourcepub fn count_ones(&self) -> usize
pub fn count_ones(&self) -> usize
Returns number of ones in the bitmap.
sourcepub fn count_zeros(&self) -> usize
pub fn count_zeros(&self) -> usize
Returns number of zeros in the bitmap.
sourceimpl<D, B> StaticBitmap<D, B>
impl<D, B> StaticBitmap<D, B>
sourcepub fn into_inner(self) -> D
pub fn into_inner(self) -> D
Converts bitmap into inner container.
sourceimpl<D, B> StaticBitmap<D, B> where
D: ContainerRead<B>,
B: BitAccess,
impl<D, B> StaticBitmap<D, B> where
D: ContainerRead<B>,
B: BitAccess,
sourcepub fn get(&self, idx: usize) -> bool
pub fn get(&self, idx: usize) -> bool
Gets single bit state.
Usage example:
use bitmac::{StaticBitmap, LSB};
let bitmap = StaticBitmap::<_, LSB>::new([0b0000_0001u8, 0b0000_1000]);
assert!(bitmap.get(0));
assert!(bitmap.get(11));
assert!(!bitmap.get(13));
// Out of bounds bits always return false
assert!(!bitmap.get(128));
sourceimpl<D, B> StaticBitmap<D, B> where
D: ContainerWrite<B>,
B: BitAccess,
impl<D, B> StaticBitmap<D, B> where
D: ContainerWrite<B>,
B: BitAccess,
sourcepub fn set(&mut self, idx: usize, val: bool)
pub fn set(&mut self, idx: usize, val: bool)
Sets new state for a single bit.
Panic
Panics if idx
is out of bounds.
See non-panic function try_set
.
Usage example:
use bitmac::{StaticBitmap, LSB};
let mut bitmap = StaticBitmap::<_, LSB>::new([0b0000_1001u8, 0b0001_1000]);
bitmap.set(12, false);
assert!(!bitmap.get(12));
bitmap.set(13, true);
assert!(bitmap.get(13));
sourcepub fn try_set(&mut self, idx: usize, val: bool) -> Result<(), OutOfBoundsError>
pub fn try_set(&mut self, idx: usize, val: bool) -> Result<(), OutOfBoundsError>
Sets new state for a single bit.
Returns Err(_)
if idx
is out of bounds.
Usage example:
use bitmac::{StaticBitmap, LSB};
let mut bitmap = StaticBitmap::<_, LSB>::new([0b0000_1001u8, 0b0001_1000]);
assert!(bitmap.try_set(12, true).is_ok());
assert!(bitmap.get(12));
assert!(bitmap.try_set(12, false).is_ok());
assert!(!bitmap.get(12));
// Out of bounds bits return error
assert!(bitmap.try_set(128, true).is_err());
assert!(!bitmap.get(128));
Trait Implementations
sourceimpl<D, B> AsMut<D> for StaticBitmap<D, B>
impl<D, B> AsMut<D> for StaticBitmap<D, B>
sourceimpl<D, B> AsRef<D> for StaticBitmap<D, B>
impl<D, B> AsRef<D> for StaticBitmap<D, B>
sourceimpl<D: Clone, B: Clone> Clone for StaticBitmap<D, B>
impl<D: Clone, B: Clone> Clone for StaticBitmap<D, B>
sourcefn clone(&self) -> StaticBitmap<D, B>
fn clone(&self) -> StaticBitmap<D, B>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl<D, B> ContainerRead<B> for StaticBitmap<D, B> where
D: ContainerRead<B>,
B: BitAccess,
impl<D, B> ContainerRead<B> for StaticBitmap<D, B> where
D: ContainerRead<B>,
B: BitAccess,
type Slot = <D as ContainerRead<B>>::Slot
sourcefn slots_count(&self) -> usize
fn slots_count(&self) -> usize
Gets number of stored slots.
sourcefn bits_count(&self) -> usize
fn bits_count(&self) -> usize
Gets max number of bits.
sourceimpl<D, B> ContainerWrite<B> for StaticBitmap<D, B> where
D: ContainerWrite<B>,
B: BitAccess,
impl<D, B> ContainerWrite<B> for StaticBitmap<D, B> where
D: ContainerWrite<B>,
B: BitAccess,
sourcefn get_mut_slot(&mut self, idx: usize) -> &mut Self::Slot
fn get_mut_slot(&mut self, idx: usize) -> &mut Self::Slot
Gets mutable reference to stored slot.
sourceimpl<D, N, B> Debug for StaticBitmap<D, B> where
D: ContainerRead<B, Slot = N>,
N: Number,
B: BitAccess,
impl<D, N, B> Debug for StaticBitmap<D, B> where
D: ContainerRead<B, Slot = N>,
N: Number,
B: BitAccess,
sourceimpl<D: Default, B: Default> Default for StaticBitmap<D, B>
impl<D: Default, B: Default> Default for StaticBitmap<D, B>
sourcefn default() -> StaticBitmap<D, B>
fn default() -> StaticBitmap<D, B>
Returns the “default value” for a type. Read more
sourceimpl<D, N, B> From<D> for StaticBitmap<D, B> where
D: ContainerRead<B, Slot = N>,
N: Number,
B: BitAccess,
impl<D, N, B> From<D> for StaticBitmap<D, B> where
D: ContainerRead<B, Slot = N>,
N: Number,
B: BitAccess,
sourceimpl<D, B, Rhs, N> Intersection<Rhs, N, B> for StaticBitmap<D, B> where
D: ContainerRead<B, Slot = N>,
B: BitAccess,
Rhs: ContainerRead<B, Slot = N>,
N: Number,
impl<D, B, Rhs, N> Intersection<Rhs, N, B> for StaticBitmap<D, B> where
D: ContainerRead<B, Slot = N>,
B: BitAccess,
Rhs: ContainerRead<B, Slot = N>,
N: Number,
sourcefn intersection_in<Dst>(&self, rhs: &Rhs, dst: &mut Dst) where
Dst: ContainerWrite<B, Slot = N>,
fn intersection_in<Dst>(&self, rhs: &Rhs, dst: &mut Dst) where
Dst: ContainerWrite<B, Slot = N>,
Calculates intersection in-place. Result will be stored in dst
. Read more
sourcefn try_intersection_in<Dst>(
&self,
rhs: &Rhs,
dst: &mut Dst
) -> Result<(), IntersectionError> where
Dst: ContainerWrite<B, Slot = N>,
fn try_intersection_in<Dst>(
&self,
rhs: &Rhs,
dst: &mut Dst
) -> Result<(), IntersectionError> where
Dst: ContainerWrite<B, Slot = N>,
Calculates intersection in-place. Result will be stored in dst
. Read more
sourcefn intersection<Dst>(&self, rhs: &Rhs) -> Dst where
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
fn intersection<Dst>(&self, rhs: &Rhs) -> Dst where
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
Calculates intersection. Result container will be created with try_with_slots
function. Read more
sourcefn try_intersection<Dst>(&self, rhs: &Rhs) -> Result<Dst, IntersectionError> where
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
fn try_intersection<Dst>(&self, rhs: &Rhs) -> Result<Dst, IntersectionError> where
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
Calculates intersection. Result container will be created with try_with_slots
function. Read more
sourcefn intersection_len(&self, rhs: &Rhs) -> usize
fn intersection_len(&self, rhs: &Rhs) -> usize
Calculates intersection length - ones count. It doesn’t allocate for storing intersection result. Read more
sourceimpl<'a, D, B> IntoIterator for &'a StaticBitmap<D, B> where
D: ContainerRead<B>,
B: BitAccess,
impl<'a, D, B> IntoIterator for &'a StaticBitmap<D, B> where
D: ContainerRead<B>,
B: BitAccess,
sourceimpl<D, B> IntoIterator for StaticBitmap<D, B> where
D: ContainerRead<B>,
B: BitAccess,
impl<D, B> IntoIterator for StaticBitmap<D, B> where
D: ContainerRead<B>,
B: BitAccess,
sourceimpl<D: PartialEq, B: PartialEq> PartialEq<StaticBitmap<D, B>> for StaticBitmap<D, B>
impl<D: PartialEq, B: PartialEq> PartialEq<StaticBitmap<D, B>> for StaticBitmap<D, B>
sourcefn eq(&self, other: &StaticBitmap<D, B>) -> bool
fn eq(&self, other: &StaticBitmap<D, B>) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourceimpl<D, B> TryWithSlots for StaticBitmap<D, B> where
D: TryWithSlots,
B: BitAccess,
impl<D, B> TryWithSlots for StaticBitmap<D, B> where
D: TryWithSlots,
B: BitAccess,
sourcefn try_with_slots(len: usize) -> Result<Self, WithSlotsError>
fn try_with_slots(len: usize) -> Result<Self, WithSlotsError>
Creates new container with specified slots number.
sourceimpl<D, B, Rhs, N> Union<Rhs, N, B> for StaticBitmap<D, B> where
D: ContainerRead<B, Slot = N>,
B: BitAccess,
Rhs: ContainerRead<B, Slot = N>,
N: Number,
impl<D, B, Rhs, N> Union<Rhs, N, B> for StaticBitmap<D, B> where
D: ContainerRead<B, Slot = N>,
B: BitAccess,
Rhs: ContainerRead<B, Slot = N>,
N: Number,
sourcefn union_in<Dst>(&self, rhs: &Rhs, dst: &mut Dst) where
Dst: ContainerWrite<B, Slot = N>,
fn union_in<Dst>(&self, rhs: &Rhs, dst: &mut Dst) where
Dst: ContainerWrite<B, Slot = N>,
Calculates union in-place. Result will be stored in dst
. Read more
sourcefn try_union_in<Dst>(&self, rhs: &Rhs, dst: &mut Dst) -> Result<(), UnionError> where
Dst: ContainerWrite<B, Slot = N>,
fn try_union_in<Dst>(&self, rhs: &Rhs, dst: &mut Dst) -> Result<(), UnionError> where
Dst: ContainerWrite<B, Slot = N>,
Calculates union in-place. Result will be stored in dst
. Read more
sourcefn union<Dst>(&self, rhs: &Rhs) -> Dst where
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
fn union<Dst>(&self, rhs: &Rhs) -> Dst where
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
Calculates union. Result container will be created with try_with_slots
function. Read more
sourcefn try_union<Dst>(&self, rhs: &Rhs) -> Result<Dst, UnionError> where
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
fn try_union<Dst>(&self, rhs: &Rhs) -> Result<Dst, UnionError> where
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
Calculates union. Result container will be created with try_with_slots
function. Read more
impl<D: Eq, B: Eq> Eq for StaticBitmap<D, B>
impl<D, B> StructuralEq for StaticBitmap<D, B>
impl<D, B> StructuralPartialEq for StaticBitmap<D, B>
Auto Trait Implementations
impl<D, B> RefUnwindSafe for StaticBitmap<D, B> where
B: RefUnwindSafe,
D: RefUnwindSafe,
impl<D, B> Send for StaticBitmap<D, B> where
B: Send,
D: Send,
impl<D, B> Sync for StaticBitmap<D, B> where
B: Sync,
D: Sync,
impl<D, B> Unpin for StaticBitmap<D, B> where
B: Unpin,
D: Unpin,
impl<D, B> UnwindSafe for StaticBitmap<D, B> where
B: UnwindSafe,
D: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more