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§
Source§impl<D, N, B> StaticBitmap<D, B>
impl<D, N, B> StaticBitmap<D, B>
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.
Source§impl<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.
Source§impl<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));
Source§impl<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§
Source§impl<D, B> AsMut<D> for StaticBitmap<D, B>
impl<D, B> AsMut<D> for StaticBitmap<D, B>
Source§impl<D, B> AsRef<D> for StaticBitmap<D, B>
impl<D, B> AsRef<D> for StaticBitmap<D, B>
Source§impl<D: Clone, B: Clone> Clone for StaticBitmap<D, B>
impl<D: Clone, B: Clone> Clone for StaticBitmap<D, B>
Source§fn clone(&self) -> StaticBitmap<D, B>
fn clone(&self) -> StaticBitmap<D, B>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<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,
Source§impl<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,
Source§fn 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.
Source§impl<D, N, B> Debug for StaticBitmap<D, B>
impl<D, N, B> Debug for StaticBitmap<D, B>
Source§impl<D: Default, B: Default> Default for StaticBitmap<D, B>
impl<D: Default, B: Default> Default for StaticBitmap<D, B>
Source§fn default() -> StaticBitmap<D, B>
fn default() -> StaticBitmap<D, B>
Returns the “default value” for a type. Read more
Source§impl<D, N, B> From<D> for StaticBitmap<D, B>
impl<D, N, B> From<D> for StaticBitmap<D, B>
Source§impl<D, B, Rhs, N> Intersection<Rhs, N, B> for StaticBitmap<D, B>
impl<D, B, Rhs, N> Intersection<Rhs, N, B> for StaticBitmap<D, B>
Source§fn 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 moreSource§fn 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 moreSource§fn intersection<Dst>(&self, rhs: &Rhs) -> Dstwhere
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
fn intersection<Dst>(&self, rhs: &Rhs) -> Dstwhere
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
Calculates intersection. Result container will be created with
try_with_slots
function. Read moreSource§fn 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 moreSource§impl<'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,
Source§impl<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,
Source§impl<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,
Source§fn try_with_slots(len: usize) -> Result<Self, WithSlotsError>
fn try_with_slots(len: usize) -> Result<Self, WithSlotsError>
Creates new container with specified slots number.
Source§impl<D, B, Rhs, N> Union<Rhs, N, B> for StaticBitmap<D, B>
impl<D, B, Rhs, N> Union<Rhs, N, B> for StaticBitmap<D, B>
Source§fn 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 moreSource§fn 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 moreSource§fn union<Dst>(&self, rhs: &Rhs) -> Dstwhere
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
fn union<Dst>(&self, rhs: &Rhs) -> Dstwhere
Dst: ContainerWrite<B, Slot = N> + TryWithSlots,
Calculates union. Result container will be created with
try_with_slots
function. Read moreSource§fn 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 moreimpl<D: Eq, B: Eq> Eq for StaticBitmap<D, B>
impl<D, B> StructuralPartialEq for StaticBitmap<D, B>
Auto Trait Implementations§
impl<D, B> Freeze for StaticBitmap<D, B>where
D: Freeze,
impl<D, B> RefUnwindSafe for StaticBitmap<D, B>where
D: RefUnwindSafe,
B: RefUnwindSafe,
impl<D, B> Send for StaticBitmap<D, B>
impl<D, B> Sync for StaticBitmap<D, B>
impl<D, B> Unpin for StaticBitmap<D, B>
impl<D, B> UnwindSafe for StaticBitmap<D, B>where
D: UnwindSafe,
B: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more