bitmatch
bitmatch copied to clipboard
A Rust crate that allows you to match, bind, and pack the individual bits of integers.
Bitmatch
The bitmatch crate provides tools for packing and unpacking integers as
sequences of bits. Supports #![no_std]
.
Examples
Using #[bitmatch]
with a let
unpacks the bits into separate
single-character variables for each letter you use.
Using bitpack!()
re-packs the bits from those single-character variables
into a single integer.
use bitmatch::bitmatch;
#[bitmatch]
fn interleave(n: u8) -> u8 {
#[bitmatch]
let "xxxx_yyyy" = n;
bitpack!("xyxy_xyxy")
}
fn main() {
assert_eq!(interleave(0xF0), 0xAA);
}
You can use #[bitmatch]
on a match
as well, and it will ensure that the
literal portions match, and bind the variable portions.
use bitmatch::bitmatch;
#[bitmatch]
fn decode(inst: u8) -> String {
#[bitmatch]
match inst {
"00oo_aabb" => format!("Op {}, {}, {}", o, a, b),
"0100_aaii" => format!("Val {}, {}", a, i),
"01??_????" => format!("Invalid"),
"10ii_aabb" => format!("Ld {}, {}, {}", a, b, i),
"11ii_aabb" => format!("St {}, {}, {}", a, b, i),
}
}