pub trait BitField {
    const BIT_LENGTH: usize;

    fn get_bit(&self, bit: usize) -> bool;
    fn get_bits<T>(&self, range: T) -> Self
    where
        T: RangeBounds<usize>
; fn set_bit(&mut self, bit: usize, value: bool) -> &mut Self; fn set_bits<T>(&mut self, range: T, value: Self) -> &mut Self
    where
        T: RangeBounds<usize>
; }
Expand description

A generic trait which provides methods for extracting and setting specific bits or ranges of bits.

Associated Constants

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

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.

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.

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.

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 1s not in the lower N bits of value.

Implementations on Foreign Types

Implementors