Skip to content

Added to_str() method for HashMap and HashSet #6414

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
May 12, 2013
41 changes: 40 additions & 1 deletion src/libcore/to_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ The `ToStr` trait for converting to strings
*/

use str;
use hashmap::HashMap;
use container::Map;
use hash::Hash;
use cmp::Eq;

pub trait ToStr {
fn to_str(&self) -> ~str;
Expand Down Expand Up @@ -46,6 +50,26 @@ impl<A:ToStr> ToStr for (A,) {
}
}

impl<A:ToStr+Hash+Eq, B:ToStr+Hash+Eq> ToStr for HashMap<A, B> {
#[inline(always)]
fn to_str(&self) -> ~str {
let mut acc = ~"{", first = true;
for self.each |key, value| {
if first {
first = false;
}
else {
str::push_str(&mut acc, ~", ");
}
str::push_str(&mut acc, key.to_str());
str::push_str(&mut acc, ~" : ");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove the space before the :

str::push_str(&mut acc, value.to_str());
}
str::push_char(&mut acc, '}');
acc
}
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change all the ~"foo" to "foo", expect for the initial one.

impl<A:ToStr,B:ToStr> ToStr for (A, B) {
#[inline(always)]
fn to_str(&self) -> ~str {
Expand Down Expand Up @@ -120,6 +144,7 @@ impl<A:ToStr> ToStr for @[A] {
#[cfg(test)]
#[allow(non_implicitly_copyable_typarams)]
mod tests {
use hashmap::HashMap;
#[test]
fn test_simple_types() {
assert!(1i.to_str() == ~"1");
Expand Down Expand Up @@ -149,4 +174,18 @@ mod tests {
assert!((~[~[], ~[1], ~[1, 1]]).to_str() ==
~"[[], [1], [1, 1]]");
}
}

#[test]
fn test_hashmap() {
let mut table: HashMap<int, int> = HashMap::new();
let empty: HashMap<int, int> = HashMap::new();

table.insert(3, 4);
table.insert(1, 2);

let table_str = table.to_str();

assert!(table_str == ~"{1 : 2, 3 : 4}" || table_str == ~"{3 : 4, 1 : 2}");
assert!(empty.to_str() == ~"{}");
}
}