From 28519c8ef64dc37ceab23d6a26a4ccea7f396a00 Mon Sep 17 00:00:00 2001 From: Glenn Willen Date: Fri, 13 Jul 2012 03:01:26 -0400 Subject: [PATCH] Add to_str for hashmap. --- src/libstd/map.rs | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/libstd/map.rs b/src/libstd/map.rs index c285bc0662903..afb5f28ae0878 100644 --- a/src/libstd/map.rs +++ b/src/libstd/map.rs @@ -1,6 +1,8 @@ //! A map type import chained::hashmap; +import io::writer_util; +import to_str::to_str; export hashmap, hashfn, eqfn, set, map, chained, hashmap, str_hash; export box_str_hash; export bytes_hash, int_hash, uint_hash, set_add; @@ -98,6 +100,7 @@ mod chained { hasher: hashfn, eqer: eqfn }; + type t = @hashmap_; enum hashmap_ { hashmap_(@hashmap__) @@ -111,7 +114,7 @@ mod chained { found_after(@entry, @entry) } - impl private_methods for t { + impl private_methods for hashmap_ { fn search_rem(k: K, h: uint, idx: uint, e_root: @entry) -> search_result { let mut e0 = e_root; @@ -285,6 +288,33 @@ mod chained { fn each_value(blk: fn(V) -> bool) { self.each(|_k, v| blk(v)) } } + impl hashmap of to_str for hashmap_ { + fn to_writer(wr: io::writer) { + if self.count == 0u { + wr.write_str("{}"); + ret; + } + + wr.write_str("{ "); + let mut first = true; + for self.each_entry |entry| { + if !first { + wr.write_str(", "); + } + first = false; + wr.write_str(entry.key.to_str()); + wr.write_str(": "); + wr.write_str((copy entry.value).to_str()); + }; + wr.write_str(" }"); + } + + fn to_str() -> ~str { + do io::with_str_writer |wr| { self.to_writer(wr) } + } + } + + fn chains(nchains: uint) -> ~[mut chain] { ret vec::to_mut(vec::from_elem(nchains, absent)); }