#[repr(align(8))]pub struct Bitmap { /* private fields */ }Expand description
Represents a C bitmap. Wraps underlying C bitmap API.
§Invariants
Must reference a [c_ulong] long enough to fit data.len() bits.
Implementations§
Source§impl Bitmap
impl Bitmap
Source§impl Bitmap
impl Bitmap
Sourcepub fn set_bit(&mut self, index: usize)
pub fn set_bit(&mut self, index: usize)
Set bit with index index.
ATTENTION: set_bit is non-atomic, which differs from the naming
convention in C code. The corresponding C function is __set_bit.
If CONFIG_RUST_BITMAP_HARDENED is not enabled and index is greater than
or equal to self.nbits, does nothing.
§Panics
Panics if CONFIG_RUST_BITMAP_HARDENED is enabled and index is greater than
or equal to self.nbits.
Sourcepub fn set_bit_atomic(&self, index: usize)
pub fn set_bit_atomic(&self, index: usize)
Set bit with index index, atomically.
This is a relaxed atomic operation (no implied memory barriers).
ATTENTION: The naming convention differs from C, where the corresponding
function is called set_bit.
If CONFIG_RUST_BITMAP_HARDENED is not enabled and index is greater than
or equal to self.len(), does nothing.
§Panics
Panics if CONFIG_RUST_BITMAP_HARDENED is enabled and index is greater than
or equal to self.len().
Sourcepub fn clear_bit(&mut self, index: usize)
pub fn clear_bit(&mut self, index: usize)
Clear index bit.
ATTENTION: clear_bit is non-atomic, which differs from the naming
convention in C code. The corresponding C function is __clear_bit.
If CONFIG_RUST_BITMAP_HARDENED is not enabled and index is greater than
or equal to self.len(), does nothing.
§Panics
Panics if CONFIG_RUST_BITMAP_HARDENED is enabled and index is greater than
or equal to self.len().
Sourcepub fn clear_bit_atomic(&self, index: usize)
pub fn clear_bit_atomic(&self, index: usize)
Clear index bit, atomically.
This is a relaxed atomic operation (no implied memory barriers).
ATTENTION: The naming convention differs from C, where the corresponding
function is called clear_bit.
If CONFIG_RUST_BITMAP_HARDENED is not enabled and index is greater than
or equal to self.len(), does nothing.
§Panics
Panics if CONFIG_RUST_BITMAP_HARDENED is enabled and index is greater than
or equal to self.len().
Sourcepub fn copy_and_extend(&mut self, src: &Bitmap)
pub fn copy_and_extend(&mut self, src: &Bitmap)
Copy src into this Bitmap and set any remaining bits to zero.
§Examples
use kernel::alloc::{AllocError, flags::GFP_KERNEL};
use kernel::bitmap::BitmapVec;
let mut long_bitmap = BitmapVec::new(256, GFP_KERNEL)?;
assert_eq!(None, long_bitmap.last_bit());
let mut short_bitmap = BitmapVec::new(16, GFP_KERNEL)?;
short_bitmap.set_bit(7);
long_bitmap.copy_and_extend(&short_bitmap);
assert_eq!(Some(7), long_bitmap.last_bit());
Sourcepub fn last_bit(&self) -> Option<usize>
pub fn last_bit(&self) -> Option<usize>
Finds last set bit.
§Examples
use kernel::alloc::{AllocError, flags::GFP_KERNEL};
use kernel::bitmap::BitmapVec;
let bitmap = BitmapVec::new(64, GFP_KERNEL)?;
match bitmap.last_bit() {
Some(idx) => {
pr_info!("The last bit has index {idx}.\n");
}
None => {
pr_info!("All bits in this bitmap are 0.\n");
}
}Sourcepub fn next_bit(&self, start: usize) -> Option<usize>
pub fn next_bit(&self, start: usize) -> Option<usize>
Finds next set bit, starting from start.
Returns None if start is greater or equal to self.nbits.
Sourcepub fn next_zero_bit(&self, start: usize) -> Option<usize>
pub fn next_zero_bit(&self, start: usize) -> Option<usize>
Finds next zero bit, starting from start.
Returns None if start is greater than or equal to self.len().