#位字段 #bitflags #标志 #位图

altbitflags

宏,用于实现类似位标志的行为的struct

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冲突。您可以使用这两个,而且应该没问题。

无运行时依赖