std: Implement FromIterator for ~str
FromIterator initially only implemented for Iterator<char>, which is the type of the main iterator.
This commit is contained in:
parent
4cc3bbb83d
commit
4849a42bf6
1 changed files with 23 additions and 1 deletions
|
@ -23,7 +23,7 @@ use char::Char;
|
|||
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 @@ impl<'self> Iterator<u8> for BytesRevIterator<'self> {
|
|||
}
|
||||
}
|
||||
|
||||
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 @@ mod tests {
|
|||
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 = ~"";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue