diff options
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/bitflags.rs | 65 |
1 files changed, 40 insertions, 25 deletions
diff --git a/src/libstd/bitflags.rs b/src/libstd/bitflags.rs index bf12dd2d94a..3c06682eaaf 100644 --- a/src/libstd/bitflags.rs +++ b/src/libstd/bitflags.rs @@ -17,14 +17,16 @@ //! # Example //! //! ~~~rust -//! bitflags!(Flags: u32 { -//! FlagA = 0x00000001, -//! FlagB = 0x00000010, -//! FlagC = 0x00000100, -//! FlagABC = FlagA.bits -//! | FlagB.bits -//! | FlagC.bits -//! }) +//! bitflags!( +//! flags Flags: u32 { +//! static FlagA = 0x00000001, +//! static FlagB = 0x00000010, +//! static FlagC = 0x00000100, +//! static FlagABC = FlagA.bits +//! | FlagB.bits +//! | FlagC.bits +//! } +//! ) //! //! fn main() { //! let e1 = FlagA | FlagC; @@ -40,10 +42,12 @@ //! ~~~rust //! use std::fmt; //! -//! bitflags!(Flags: u32 { -//! FlagA = 0x00000001, -//! FlagB = 0x00000010 -//! }) +//! bitflags!( +//! flags Flags: u32 { +//! static FlagA = 0x00000001, +//! static FlagB = 0x00000010 +//! } +//! ) //! //! impl Flags { //! pub fn clear(&mut self) { @@ -66,10 +70,16 @@ //! } //! ~~~ //! +//! # Attributes +//! +//! Attributes can be attached to the generated `struct` by placing them +//! before the `flags` keyword. +//! //! # Derived traits //! -//! The `Eq`, `TotalEq`, and `Clone` traits are automatically derived for the -//! `struct` using the `deriving` attribute. +//! The `Eq` and `Clone` traits are automatically derived for the `struct` using +//! the `deriving` attribute. Additional traits can be derived by providing an +//! explicit `deriving` attribute on `flags`. //! //! # Operators //! @@ -91,17 +101,20 @@ //! - `insert`: inserts the specified flags in-place //! - `remove`: removes the specified flags in-place +#![macro_escape] + #[macro_export] macro_rules! bitflags( - ($BitFlags:ident: $T:ty { - $($Flag:ident = $value:expr),+ + ($(#[$attr:meta])* flags $BitFlags:ident: $T:ty { + $($(#[$Flag_attr:meta])* static $Flag:ident = $value:expr),+ }) => ( #[deriving(Eq, TotalEq, Clone)] + $(#[$attr])* pub struct $BitFlags { bits: $T, } - $(pub static $Flag: $BitFlags = $BitFlags { bits: $value };)+ + $($(#[$Flag_attr])* pub static $Flag: $BitFlags = $BitFlags { bits: $value };)+ impl $BitFlags { /// Returns an empty set of flags. @@ -170,14 +183,16 @@ macro_rules! bitflags( mod tests { use ops::{BitOr, BitAnd, Sub}; - bitflags!(Flags: u32 { - FlagA = 0x00000001, - FlagB = 0x00000010, - FlagC = 0x00000100, - FlagABC = FlagA.bits - | FlagB.bits - | FlagC.bits - }) + bitflags!( + flags Flags: u32 { + static FlagA = 0x00000001, + static FlagB = 0x00000010, + static FlagC = 0x00000100, + static FlagABC = FlagA.bits + | FlagB.bits + | FlagC.bits + } + ) #[test] fn test_bits(){ |
