5 个版本
0.3.2 | 2022 年 11 月 7 日 |
---|---|
0.3.1 | 2022 年 8 月 3 日 |
0.2.1 | 2022 年 7 月 20 日 |
0.1.2 |
|
#255 在 无标准库 中
每月 36 次下载
15KB
122 行
Superbitty
位字段包。
use superbitty::{bitfields, BitFieldCompatible};
#[derive(BitFieldCompatible, Debug, Clone, Copy, PartialEq, Eq)]
pub enum Enum {
A,
B,
C,
D,
}
#[derive(Clone, Copy)]
pub struct Rest(pub u8);
// SAFETY: We only set this via `Bitfields`, and thus the values are guaranteed
// to stay in range.
unsafe impl BitFieldCompatible for Rest {
const SHIFT: u32 = 0;
const BITS_LEN: u32 = 6;
fn into_raw(self) -> u128 { self.0 as u128 }
unsafe fn from_raw(v: u128) -> Self { Self(v as u8) }
}
bitfields! {
pub struct Bitfields : u8 {
pub e: Enum,
pub r: Rest,
}
}
fn main() {
let mut instance = Bitfields::new(Enum::B, Rest(0b010));
assert_eq!(instance.e(), Enum::B);
instance.set_r(Rest(0b101));
assert_eq!(instance.r().0, 0b101);
}
lib.rs
:
位字段包。
use superbitty::{bitfields, BitFieldCompatible};
#[derive(BitFieldCompatible, Debug, Clone, Copy, PartialEq, Eq)]
pub enum Enum {
A,
B,
C,
D,
}
#[derive(Clone, Copy)]
pub struct Rest(pub u8);
// SAFETY: We only set this via `Bitfields`, and thus the values are guaranteed
// to stay in range.
unsafe impl BitFieldCompatible for Rest {
const SHIFT: u32 = 0;
const BITS_LEN: u32 = 6;
fn into_raw(self) -> u128 { self.0 as u128 }
unsafe fn from_raw(v: u128) -> Self { Self(v as u8) }
}
bitfields! {
pub struct Bitfields : u8 {
pub e: Enum,
pub r: Rest,
}
}
fn main() {
let mut instance = Bitfields::new(Enum::B, Rest(0b010));
assert_eq!(instance.e(), Enum::B);
instance.set_r(Rest(0b101));
assert_eq!(instance.r().0, 0b101);
}
依赖
~1.5MB
~35K SLoC