pub trait BitField {
const BIT_LENGTH: usize;
// Required methods
fn get_bit(&self, bit: usize) -> bool;
fn get_bits<T: RangeBounds<usize>>(&self, range: T) -> Self;
fn set_bit(&mut self, bit: usize, value: bool) -> &mut Self;
fn set_bits<T: RangeBounds<usize>>(
&mut self,
range: T,
value: Self,
) -> &mut Self;
}
Expand description
A generic trait which provides methods for extracting and setting specific bits or ranges of bits.
Required Associated Constants§
Sourceconst BIT_LENGTH: usize
const BIT_LENGTH: usize
The number of bits in this bit field.
use bit_field::BitField;
assert_eq!(u32::BIT_LENGTH, 32);
assert_eq!(u64::BIT_LENGTH, 64);
Required Methods§
Sourcefn get_bit(&self, bit: usize) -> bool
fn get_bit(&self, bit: usize) -> bool
Obtains the bit at the index bit
; note that index 0 is the least significant bit, while
index length() - 1
is the most significant bit.
use bit_field::BitField;
let value: u32 = 0b110101;
assert_eq!(value.get_bit(1), false);
assert_eq!(value.get_bit(2), true);
§Panics
This method will panic if the bit index is out of bounds of the bit field.
Sourcefn get_bits<T: RangeBounds<usize>>(&self, range: T) -> Self
fn get_bits<T: RangeBounds<usize>>(&self, range: T) -> Self
Obtains the range of bits specified by range
; note that index 0 is the least significant
bit, while index length() - 1
is the most significant bit.
use bit_field::BitField;
let value: u32 = 0b110101;
assert_eq!(value.get_bits(0..3), 0b101);
assert_eq!(value.get_bits(2..6), 0b1101);
assert_eq!(value.get_bits(..), 0b110101);
assert_eq!(value.get_bits(3..=3), value.get_bit(3) as u32);
§Panics
This method will panic if the start or end indexes of the range are out of bounds of the bit field.
Sourcefn set_bit(&mut self, bit: usize, value: bool) -> &mut Self
fn set_bit(&mut self, bit: usize, value: bool) -> &mut Self
Sets the bit at the index bit
to the value value
(where true means a value of ‘1’ and
false means a value of ‘0’); note that index 0 is the least significant bit, while index
length() - 1
is the most significant bit.
use bit_field::BitField;
let mut value = 0u32;
value.set_bit(1, true);
assert_eq!(value, 2u32);
value.set_bit(3, true);
assert_eq!(value, 10u32);
value.set_bit(1, false);
assert_eq!(value, 8u32);
§Panics
This method will panic if the bit index is out of the bounds of the bit field.
Sourcefn set_bits<T: RangeBounds<usize>>(
&mut self,
range: T,
value: Self,
) -> &mut Self
fn set_bits<T: RangeBounds<usize>>( &mut self, range: T, value: Self, ) -> &mut Self
Sets the range of bits defined by the range range
to the lower bits of value
; to be
specific, if the range is N bits long, the N lower bits of value
will be used; if any of
the other bits in value
are set to 1, this function will panic.
use bit_field::BitField;
let mut value = 0u32;
value.set_bits(0..2, 0b11);
assert_eq!(value, 0b11);
value.set_bits(2..=3, 0b11);
assert_eq!(value, 0b1111);
value.set_bits(..4, 0b1010);
assert_eq!(value, 0b1010);
§Panics
This method will panic if the range is out of bounds of the bit field, or if there are 1
s
not in the lower N bits of value
.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.