Delegate ToStr implementation to Show for tuples

This commit is contained in:
Brendan Zabarauskas 2014-02-16 18:27:46 +11:00
parent bf6abf8cb3
commit 6f39eb1a56
2 changed files with 7 additions and 48 deletions

View File

@ -40,17 +40,6 @@ impl ToStr for () {
fn to_str(&self) -> ~str { ~"()" }
}
impl<A:ToStr> ToStr for (A,) {
#[inline]
fn to_str(&self) -> ~str {
match *self {
(ref a,) => {
format!("({},)", (*a).to_str())
}
}
}
}
impl<A:ToStr+Hash+Eq, B:ToStr> ToStr for HashMap<A, B> {
#[inline]
fn to_str(&self) -> ~str {
@ -91,36 +80,6 @@ impl<A:ToStr+Hash+Eq> ToStr for HashSet<A> {
}
}
impl<A:ToStr,B:ToStr> ToStr for (A, B) {
#[inline]
fn to_str(&self) -> ~str {
// FIXME(#4653): this causes an llvm assertion
//let &(ref a, ref b) = self;
match *self {
(ref a, ref b) => {
format!("({}, {})", (*a).to_str(), (*b).to_str())
}
}
}
}
impl<A:ToStr,B:ToStr,C:ToStr> ToStr for (A, B, C) {
#[inline]
fn to_str(&self) -> ~str {
// FIXME(#4653): this causes an llvm assertion
//let &(ref a, ref b, ref c) = self;
match *self {
(ref a, ref b, ref c) => {
format!("({}, {}, {})",
(*a).to_str(),
(*b).to_str(),
(*c).to_str()
)
}
}
}
}
impl<'a,A:ToStr> ToStr for &'a [A] {
#[inline]
fn to_str(&self) -> ~str {
@ -178,13 +137,6 @@ mod tests {
assert_eq!((~"hi").to_str(), ~"hi");
}
#[test]
fn test_tuple_types() {
assert_eq!((1, 2).to_str(), ~"(1, 2)");
assert_eq!((~"a", ~"b", false).to_str(), ~"(a, b, false)");
assert_eq!(((), ((), 100)).to_str(), ~"((), ((), 100))");
}
#[test]
fn test_vectors() {
let x: ~[int] = ~[];

View File

@ -17,6 +17,7 @@ use clone::Clone;
#[cfg(not(test))] use default::Default;
use fmt;
use result::{Ok, Err};
use to_str::ToStr;
/// Method extensions to pairs where both types satisfy the `Clone` bound
pub trait CloneableTuple<T, U> {
@ -179,6 +180,12 @@ macro_rules! tuple_impls {
}
}
impl<$($T: fmt::Show),+> ToStr for ($($T,)+) {
fn to_str(&self) -> ~str {
format!("{}", *self)
}
}
impl<$($T: fmt::Show),+> fmt::Show for ($($T,)+) {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write_tuple!(f.buf, $(self.$get_ref_fn()),+)