diff --git a/src/libcollections/bitv.rs b/src/libcollections/bitv.rs index 48491222be4..54bc6989d7c 100644 --- a/src/libcollections/bitv.rs +++ b/src/libcollections/bitv.rs @@ -12,11 +12,11 @@ use std::cmp; +use std::fmt; use std::iter::RandomAccessIterator; use std::iter::{Enumerate, Repeat, Map, Zip}; use std::ops; use std::slice; -use std::string::String; use std::uint; #[deriving(Clone)] @@ -526,25 +526,6 @@ impl Bitv { Vec::from_fn(self.nbits, |i| self[i]) } - /** - * Converts `self` to a string. - * - * The resulting string has the same length as `self`, and each - * character is either '0' or '1'. - */ - pub fn to_str(&self) -> String { - let mut rs = String::new(); - for i in self.iter() { - if i { - rs.push_char('1'); - } else { - rs.push_char('0'); - } - }; - rs - } - - /** * Compare a bitvector to a vector of `bool`. * @@ -604,6 +585,15 @@ impl ops::Index for Bitv { } } +impl fmt::Show for Bitv { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + for bit in self.iter() { + try!(write!(fmt, "{}", if bit { 1 } else { 0 })); + } + Ok(()) + } +} + #[inline] fn iterate_bits(base: uint, bits: uint, f: |uint| -> bool) -> bool { if bits == 0 { @@ -827,6 +817,21 @@ impl cmp::Eq for BitvSet { fn ne(&self, other: &BitvSet) -> bool { !self.eq(other) } } +impl fmt::Show for BitvSet { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + try!(write!(fmt, r"\{")); + let mut first = true; + for n in self.iter() { + if !first { + try!(write!(fmt, ", ")); + } + try!(write!(fmt, "{}", n)); + first = false; + } + write!(fmt, r"\}") + } +} + impl Container for BitvSet { #[inline] fn len(&self) -> uint { self.size } @@ -1629,6 +1634,16 @@ mod tests { assert!(!v.none()); } + #[test] + fn test_bitv_set_show() { + let mut s = BitvSet::new(); + s.insert(1); + s.insert(10); + s.insert(50); + s.insert(2); + assert_eq!("{1, 2, 10, 50}".to_string(), s.to_str()); + } + fn rng() -> rand::IsaacRng { let seed = &[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; rand::SeedableRng::from_seed(seed)