Macro bitutils::bf[][src]

macro_rules! bf {
    ($name:ident [$ty:ty] { $($var_name:ident: $var_low:tt : $var_hi:tt),* $(,)* }) => { ... };
}

Declare a bitfield type.

#[macro_use]
extern crate bitutils;
 
bf!(BitfieldName[u8] {
    field1: 0:3, // lower nibble
    field2: 4:6,
    field3: 7:7
});
 
let mut bf = BitfieldName::new(0);
bf.field3.set(0xF);
assert_eq!(bf.val, 0x80);
 
bf.val = 0xF0;
assert_eq!(bf.field1.get(), 0);
assert_eq!(bf.field2.get(), 7);
assert_eq!(bf.field3.get(), 1);

This declares a module BitfieldName with the members:

  • pub struct Bf { pub val: T, pub field1: Field1, pub field2... }
  • pub fn new(val: T) -> Bf
  • pub fn alias(val: &'a T) -> &'a Bf
  • pub fn alias_mut(val: &'a mut T) -> &'a mut Bf

Each field has the impl:

  • pub fn get(&self) -> T
  • pub fn set(&mut self, val: T)
  • pub fn update(&mut self, func: FnOnce(T) -> T)