Skip to content

Commit

Permalink
auto merge of rust-lang#16074 : nham/rust/bitflags_traits, r=alexcric…
Browse files Browse the repository at this point in the history
…hton

I wanted to add an implementation of `Default` inside the bitflags macro, but `Default` isn't in the prelude, which means anyone who wants to use `bitflags!` needs to import it. This seems not nice, so I've just implemented for `FilePermission` instead.
  • Loading branch information
bors committed Jul 31, 2014
2 parents 28ae6f5 + 96d6126 commit 6f833ee
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 2 deletions.
41 changes: 40 additions & 1 deletion src/libstd/bitflags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ macro_rules! bitflags(
($(#[$attr:meta])* flags $BitFlags:ident: $T:ty {
$($(#[$Flag_attr:meta])* static $Flag:ident = $value:expr),+
}) => (
#[deriving(PartialEq, Eq, Clone)]
#[deriving(PartialEq, Eq, Clone, PartialOrd, Ord, Hash)]
$(#[$attr])*
pub struct $BitFlags {
bits: $T,
Expand Down Expand Up @@ -220,6 +220,7 @@ macro_rules! bitflags(

#[cfg(test)]
mod tests {
use hash;
use option::{Some, None};
use ops::{BitOr, BitAnd, Sub, Not};

Expand Down Expand Up @@ -336,4 +337,42 @@ mod tests {
assert!((e1 - e2) == FlagA); // set difference
assert!(!e2 == FlagA); // set complement
}

#[test]
fn test_lt() {
let mut a = Flags::empty();
let mut b = Flags::empty();

assert!(!(a < b) && !(b < a));
b = FlagB;
assert!(a < b);
a = FlagC;
assert!(!(a < b) && b < a);
b = FlagC | FlagB;
assert!(a < b);
}

#[test]
fn test_ord() {
let mut a = Flags::empty();
let mut b = Flags::empty();

assert!(a <= b && a >= b);
a = FlagA;
assert!(a > b && a >= b);
assert!(b < a && b <= a);
b = FlagB;
assert!(b > a && b >= a);
assert!(a < b && a <= b);
}

#[test]
fn test_hash() {
let mut x = Flags::empty();
let mut y = Flags::empty();
assert!(hash::hash(&x) == hash::hash(&y));
x = Flags::all();
y = FlagABC;
assert!(hash::hash(&x) == hash::hash(&y));
}
}
7 changes: 6 additions & 1 deletion src/libstd/io/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ responding to errors that may occur while attempting to read the numbers.

use char::Char;
use collections::Collection;
use default::Default;
use fmt;
use int;
use iter::Iterator;
Expand Down Expand Up @@ -1795,7 +1796,6 @@ pub struct UnstableFileStat {
bitflags!(
#[doc="A set of permissions for a file or directory is represented
by a set of flags which are or'd together."]
#[deriving(Hash)]
#[deriving(Show)]
flags FilePermission: u32 {
static UserRead = 0o400,
Expand Down Expand Up @@ -1830,6 +1830,11 @@ on unix-like systems."]
}
)

impl Default for FilePermission {
#[inline]
fn default() -> FilePermission { FilePermission::empty() }
}

#[cfg(test)]
mod tests {
use super::{IoResult, Reader, MemReader, NoProgress, InvalidInput};
Expand Down

0 comments on commit 6f833ee

Please sign in to comment.