#[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()
.