auto merge of #8100 : blake2-ppc/rust/str-collect, r=pcwalton

FromIterator initially only implemented for Iterator<char>, which is the
type of the main iterator.
This commit is contained in:
bors 2013-07-28 18:49:24 -07:00
commit 52dbe138cf

View File

@ -23,7 +23,7 @@
use clone::Clone;
use container::{Container, Mutable};
use iter::Times;
use iterator::{Iterator, IteratorUtil, FilterIterator, AdditiveIterator, MapIterator};
use iterator::{Iterator, FromIterator, IteratorUtil, FilterIterator, AdditiveIterator, MapIterator};
use libc;
use num::Zero;
use option::{None, Option, Some};
@ -2319,6 +2319,18 @@ fn next(&mut self) -> Option<u8> {
}
}
impl<T: Iterator<char>> FromIterator<char, T> for ~str {
#[inline]
fn from_iterator(iterator: &mut T) -> ~str {
let (lower, _) = iterator.size_hint();
let mut buf = with_capacity(lower);
for iterator.advance |ch| {
buf.push_char(ch)
}
buf
}
}
// This works because every lifetime is a sub-lifetime of 'static
impl<'self> Zero for &'self str {
fn zero() -> &'self str { "" }
@ -2482,6 +2494,16 @@ fn test_unshift_char() {
assert_eq!(~"华ประเทศไทย中", data);
}
#[test]
fn test_collect() {
let empty = "";
let s: ~str = empty.iter().collect();
assert_eq!(empty, s.as_slice());
let data = "ประเทศไทย中";
let s: ~str = data.iter().collect();
assert_eq!(data, s.as_slice());
}
#[test]
fn test_clear() {
let mut empty = ~"";