1 个不稳定版本
使用旧的Rust 2015
0.1.0 | 2016年8月28日 |
---|
#36 在 #bitflags 中
7KB
altbitflags
如果您需要以直观的方式创建大量多对多对多的位字段,请查看这些宏之一。
它不是一个类似C的位字段结构生成器。它更像是一个命名的位图。不过,如果您经常需要更改整数中的单个位,您可以通过这些宏生成的函数来访问它们。
演示
// Make sure to write #[macro_use]!
#[macro_use]
extern crate altbitflags;
// Create some structure which will act like a bitfield structure.
struct Something(i64);
impl Something {
// Create ReadWrite flag called 'present' (or shorthand 'p').
// To set a value use 'set_p' or 'set_present'.
// Flag position is bit number 0.
flag_rw!(p, set_p, present, set_present, 0);
// Create ReadOnly flag 'extended' (and 'e') at position 1.
flag_ro!(e, extended, 1);
// Shorter version of a flag_rw! macro.
flag_rw!(a, set_a, 2);
// Shorter version of a flag_ro! macro.
flag_ro!(b, 3);
}
fn some_fn() {
// ...
let mut something = Something(0);
// This means the same thing:
if (something.p()) { /* ... */ }
if (something.present()) { /* ... */ }
// As does this:
something.set_present(true);
something.set_p(true);
// ...
}
注意
这 NOT 是 "rust bitflags"crate的克隆。它虽然是我对Rust中位标志应该如何实现的另一种看法,我相信在某些情况下,这个版本更合适,更容易使用和理解。此外,它不会与Rust编译器的bitflags冲突。您可以使用这两个,而且应该没问题。