Skip to content

Commit 30bf73f

Browse files
committed
auto merge of #14447 : erickt/rust/show-treemap, r=kballard
This is a hodge podge of a couple small cleanup commits. It implements `Show` for `TreeMap` and `TreeSet`, and some removal of commented out code.
2 parents 1fc29ef + 926504c commit 30bf73f

File tree

3 files changed

+72
-32
lines changed

3 files changed

+72
-32
lines changed

src/libcollections/hashmap.rs

+14
Original file line numberDiff line numberDiff line change
@@ -2003,6 +2003,20 @@ mod test_map {
20032003
assert_eq!(m1, m2);
20042004
}
20052005

2006+
#[test]
2007+
fn test_show() {
2008+
let mut map: HashMap<int, int> = HashMap::new();
2009+
let empty: HashMap<int, int> = HashMap::new();
2010+
2011+
map.insert(1, 2);
2012+
map.insert(3, 4);
2013+
2014+
let map_str = format!("{}", map);
2015+
2016+
assert!(map_str == "{1: 2, 3: 4}".to_owned() || map_str == "{3: 4, 1: 2}".to_owned());
2017+
assert_eq!(format!("{}", empty), "{}".to_owned());
2018+
}
2019+
20062020
#[test]
20072021
fn test_expand() {
20082022
let mut m = HashMap::new();

src/libcollections/treemap.rs

+58-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
//! trees. The only requirement for the types is that the key implements
1313
//! `TotalOrd`.
1414
15-
use std::iter;
16-
use std::iter::{Peekable};
1715
use std::cmp::Ordering;
16+
use std::fmt::Show;
17+
use std::fmt;
18+
use std::iter::Peekable;
19+
use std::iter;
1820
use std::mem::{replace, swap};
1921
use std::ptr;
2022

@@ -67,6 +69,19 @@ impl<K: Ord + TotalOrd, V: Ord> Ord for TreeMap<K, V> {
6769
fn lt(&self, other: &TreeMap<K, V>) -> bool { lt(self, other) }
6870
}
6971

72+
impl<K: TotalOrd + Show, V: Show> Show for TreeMap<K, V> {
73+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
74+
try!(write!(f, r"\{"));
75+
76+
for (i, (k, v)) in self.iter().enumerate() {
77+
if i != 0 { try!(write!(f, ", ")); }
78+
try!(write!(f, "{}: {}", *k, *v));
79+
}
80+
81+
write!(f, r"\}")
82+
}
83+
}
84+
7085
impl<K: TotalOrd, V> Container for TreeMap<K, V> {
7186
fn len(&self) -> uint { self.length }
7287
}
@@ -547,6 +562,19 @@ impl<T: Ord + TotalOrd> Ord for TreeSet<T> {
547562
fn lt(&self, other: &TreeSet<T>) -> bool { self.map < other.map }
548563
}
549564

565+
impl<T: TotalOrd + Show> Show for TreeSet<T> {
566+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
567+
try!(write!(f, r"\{"));
568+
569+
for (i, x) in self.iter().enumerate() {
570+
if i != 0 { try!(write!(f, ", ")); }
571+
try!(write!(f, "{}", *x));
572+
}
573+
574+
write!(f, r"\}")
575+
}
576+
}
577+
550578
impl<T: TotalOrd> Container for TreeSet<T> {
551579
#[inline]
552580
fn len(&self) -> uint { self.map.len() }
@@ -1328,6 +1356,20 @@ mod test_treemap {
13281356
assert!(a < b && a <= b);
13291357
}
13301358

1359+
#[test]
1360+
fn test_show() {
1361+
let mut map: TreeMap<int, int> = TreeMap::new();
1362+
let empty: TreeMap<int, int> = TreeMap::new();
1363+
1364+
map.insert(1, 2);
1365+
map.insert(3, 4);
1366+
1367+
let map_str = format!("{}", map);
1368+
1369+
assert!(map_str == "{1: 2, 3: 4}".to_owned());
1370+
assert_eq!(format!("{}", empty), "{}".to_owned());
1371+
}
1372+
13311373
#[test]
13321374
fn test_lazy_iterator() {
13331375
let mut m = TreeMap::new();
@@ -1723,4 +1765,18 @@ mod test_set {
17231765
assert!(set.contains(x));
17241766
}
17251767
}
1768+
1769+
#[test]
1770+
fn test_show() {
1771+
let mut set: TreeSet<int> = TreeSet::new();
1772+
let empty: TreeSet<int> = TreeSet::new();
1773+
1774+
set.insert(1);
1775+
set.insert(2);
1776+
1777+
let set_str = format!("{}", set);
1778+
1779+
assert!(set_str == "{1, 2}".to_owned());
1780+
assert_eq!(format!("{}", empty), "{}".to_owned());
1781+
}
17261782
}

src/libserialize/json.rs

-30
Original file line numberDiff line numberDiff line change
@@ -1434,36 +1434,6 @@ impl<T: Iterator<char>> Parser<T> {
14341434
},
14351435
},
14361436
_ => return self.error(InvalidEscape),
1437-
/*=======
1438-
'u' => {
1439-
// Parse \u1234.
1440-
let mut i = 0u;
1441-
let mut n = 0u;
1442-
while i < 4u && !self.eof() {
1443-
self.bump();
1444-
n = match self.ch_or_null() {
1445-
c @ '0' .. '9' => n * 16u + (c as uint) - ('0' as uint),
1446-
'a' | 'A' => n * 16u + 10u,
1447-
'b' | 'B' => n * 16u + 11u,
1448-
'c' | 'C' => n * 16u + 12u,
1449-
'd' | 'D' => n * 16u + 13u,
1450-
'e' | 'E' => n * 16u + 14u,
1451-
'f' | 'F' => n * 16u + 15u,
1452-
_ => return self.error(UnrecognizedHex)
1453-
};
1454-
1455-
i += 1u;
1456-
}
1457-
1458-
// Error out if we didn't parse 4 digits.
1459-
if i != 4u {
1460-
return self.error(NotFourDigit);
1461-
}
1462-
1463-
res.push_char(char::from_u32(n as u32).unwrap());
1464-
}
1465-
_ => return self.error(InvalidEscape),
1466-
>>>>>>> Add a streaming parser to serialize::json.*/
14671437
}
14681438
escape = false;
14691439
} else if self.ch_is('\\') {

0 commit comments

Comments
 (0)