auto merge of #17245 : sfackler/rust/enumset-show, r=alexcrichton
This commit is contained in:
commit
cdd46f8592
@ -14,8 +14,9 @@
|
||||
//! representation to hold C-like enum variants.
|
||||
|
||||
use core::prelude::*;
|
||||
use core::fmt;
|
||||
|
||||
#[deriving(Clone, PartialEq, Eq, Hash, Show)]
|
||||
#[deriving(Clone, PartialEq, Eq, Hash)]
|
||||
/// A specialized `Set` implementation to use enum types.
|
||||
pub struct EnumSet<E> {
|
||||
// We must maintain the invariant that no bits are set
|
||||
@ -23,6 +24,21 @@ pub struct EnumSet<E> {
|
||||
bits: uint
|
||||
}
|
||||
|
||||
impl<E:CLike+fmt::Show> fmt::Show for EnumSet<E> {
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
try!(write!(fmt, "{{"));
|
||||
let mut first = true;
|
||||
for e in self.iter() {
|
||||
if !first {
|
||||
try!(write!(fmt, ", "));
|
||||
}
|
||||
try!(write!(fmt, "{}", e));
|
||||
first = false;
|
||||
}
|
||||
write!(fmt, "}}")
|
||||
}
|
||||
}
|
||||
|
||||
/// An interface for casting C-like enum to uint and back.
|
||||
pub trait CLike {
|
||||
/// Converts a C-like enum to a `uint`.
|
||||
@ -165,6 +181,16 @@ mod test {
|
||||
assert!(e.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_show() {
|
||||
let mut e = EnumSet::empty();
|
||||
assert_eq!("{}", e.to_string().as_slice());
|
||||
e.add(A);
|
||||
assert_eq!("{A}", e.to_string().as_slice());
|
||||
e.add(C);
|
||||
assert_eq!("{A, C}", e.to_string().as_slice());
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// intersect
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user